Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有嵌套列表/多个for循环的并集_Python_List_Dictionary_Set_Union - Fatal编程技术网

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"]])
    

    啊…所以我需要交换语句。啊…所以我需要交换语句。