Python 具有嵌套列表/多个for循环的并集
我有一本这样的字典:Python 具有嵌套列表/多个for循环的并集,python,list,dictionary,set,union,Python,List,Dictionary,Set,Union,我有一本这样的字典: myDict = {'items': [{'names': [{'longName1', 'shortName1'}, {'shortName2', 'longName2'}]}, {'names': [{'longName3', 'shortName3'}, {'shortName4', 'longName4'}]}]} 试图以pyth
myDict = {'items':
[{'names': [{'longName1', 'shortName1'},
{'shortName2', 'longName2'}]},
{'names': [{'longName3', 'shortName3'},
{'shortName4', 'longName4'}]}]}
试图以pythonical方式获取集合中的密钥(即shortName)。我有以下陈述,但它抱怨I
没有定义。我做错了什么
shortNames = set().union(*(j.values() for j in i["names"] for i in myDict["items"]))
预期结果:
set(['shortName1', 'shortName2', 'shortName3', 'shortName4'])
在myDict[“items”]中的
i定义了i[“names”]
之前,您正在访问i[“names”]
,在myDict[“items”]
中的i定义了之前,您正在访问i[“names”]
,,请参见,不建议仅为了简洁而链接列表理解。既然你在问,一种方法是:
>>> from itertools import chain
>>> {j for j in (chain.from_iterable(sum([i['names'] for i in myDict['items']],[]))) if j.startswith('short')}
{'shortName1', 'shortName2', 'shortName3', 'shortName4'}
您的方法无法工作:
如前所述
j.values()
不会给您提供短名称
,因为这些短名称在集合中
不是指令
,而集合
没有值()
方法
或:
请参阅,不建议仅为了简洁而链接列表理解。既然你在问,一种方法是:
>>> from itertools import chain
>>> {j for j in (chain.from_iterable(sum([i['names'] for i in myDict['items']],[]))) if j.startswith('short')}
{'shortName1', 'shortName2', 'shortName3', 'shortName4'}
您的方法无法工作:
如前所述
j.values()
不会给您提供短名称
,因为这些短名称在集合中
不是指令
,而集合
没有值()
方法
或:
您必须将交换为循环:
set().union(*[j for i in myDict["items"] for j in i["names"]])
您必须将交换为循环:
set().union(*[j for i in myDict["items"] for j in i["names"]])
啊…所以我需要交换语句。啊…所以我需要交换语句。