如果我有两个列表:
l_Y = [1, 2]
l_Z = [3, 4]
实现此结果的最简单方法是什么?:
[{'a':1, 'b':1, 'c':'Y'}, {'a':2, 'b':2, 'c':'Y'}...
{'a':3, 'b':3, 'c':'Z'}, {'a':4, 'b':4, 'c':'Z'}]
基本上,如果是列表 l_Y 那么 c 的值应该是 Y,如果是 l_Z 那么 c 的值应该是 Z。
我试过这个:
[{'a':nb, 'b':nb, 'c':letter} for nb in [l_Y, l_Z] letter='Y' if nb is l_Y else 'Z']
但是得到一个“SyntaxError”
nb 无论如何都会返回完整的列表而不是一个元素,所以不知道该怎么做...
最佳答案
鉴于此,我会这样做
[{'a':val,'b':val,'c':('Y' if lst==l_Y else 'Z')} for lst in (l_Y,l_Z) for val in lst]
不过,老实说,正如 Blender 在他的评论中提到的那样,您最好将列表存储在字典中,如下所示:
lists = {'Y':[1,2],'Z':[3,4]}
做
[{'a':val,'b':val,'c':key} for key,item in lists.items() for val in item]
两者都会导致
[{'a': 1, 'c': 'Y', 'b': 1}, {'a': 2, 'c': 'Y', 'b': 2}, {'a': 3, 'c': 'Z', 'b': 3}, {'a': 4, 'c': 'Z', 'b': 4}]
我想这就是您要找的。p>
dict 方法有两个好处 - 它使维护更清晰(命名空间中只有一个变量名 float ),并且使获取/检索列表的代码更清晰。
旧方法要求您执行此操作以从结果中取回您的列表:
lst_that_was_passed_in = globals()['l_'+<Y or Z>]
而较新的方法只需要 lists[<Y or Z>]
这使得它更易于维护,命名空间更清晰,并避免了麻烦。
关于python - 将两个列表组合在字典中 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18114879/