【问题标题】:converting dictionary values to list in Python在 Python 中将字典值转换为列表
【发布时间】:2018-04-03 21:46:26
【问题描述】:

假设我有一个字典(dict),其键和值如下:

打印(字典)

{'AAA': {'', '111', '222'}, 'BBB': {'222', '999', '555'}}

我想以单个字符串的形式从字典中提取值,即type(values) = str,如:

values = '111', '222', '999', 555'

但我得到的是下面dict.values():

dict.keys()

dict_keys(['AAA', 'BBB'])

dict.values()

dict_values([{'', '111', '222'}, {'222', '999', '555'}])

我怎样才能达到要求的结果?

【问题讨论】:

    标签: python list dictionary key-value-store


    【解决方案1】:

    您可以使用itertools.chain 来执行此操作:

    In [92]: from itertools import chain
    
    In [93]: dct = {'AAA': {'', '111', '222'}, 'BBB': {'222', '999', '555'}}
    
    In [94]: {x for x in chain(*dct.values()) if x}
    Out[94]: {'111', '222', '555', '999'}
    

    如果您想将此输出转换为单个字符串,只需对其使用 str() 调用,或使用 ", ".join(x for x in chain(*dct.values()) if x)

    【讨论】:

    • 不输出字符串...添加这将', '.join(y for y in {x for x in chain(*d.values()) if x})
    • @drec4s 我知道它没有; Op 说他想要values = '111', '222', '999', 555',所以这方面的要求并不明确。但我进行了更改,以便 OP 可以在集合上调用 str 以将值作为单个字符串获取。
    • OP 明确表示他希望以“单个字符串的形式”输出...
    • 不过,这是最有效的方法。 +1
    【解决方案2】:

    如果您希望它们作为单个字符串输出,我相信这就是您所追求的:

    mydict = {'AAA': {'', '111', '222'}, 'BBB': {'222', '999', '555'}}
    
    out = []
    for keys, values in mydict.items():
        [out.append(i) for i in values if i!='']
    
    out = ','.join(set(out))
    
    print(out)
    
    print(type(out))
    

    输出:

    555,222,111,999
    
    <class 'str'>
    

    【讨论】:

      【解决方案3】:

      你想要类似的东西

      d = dict()
      d[0] = '0'
      str(d)
      

      ?

      之后字符串操作就相当简单了

      【讨论】:

        【解决方案4】:

        只需使用extend 方法:

        values = []
        for key in some_dict:
            values.extend(list(some_dict[key]))
        

        如果需要删除空字符串,使用:

        values = list(filter(None, values))
        

        this SE entry

        如果你愿意,你可以把它转换成一个元组:)

        【讨论】:

        • 这行不通,这些值是一个集合而不是一个列表。虽然您的方法方向正确,但您可以探索 set.add 方法并更正代码
        • 已添加转化。
        • 不要迂腐,但这不会再次输出正确的结果。值 '222' 将重复两次,在 sets 的情况下不会重复 :)
        【解决方案5】:

        这是不导入任何模块的另一种方法。

        dict = {'AAA': {'', '111', '222'}, 'BBB': {'222', '999', '555'}}
        result = []
        print([[result.append(item) or item for item in one_set if item] for one_set in dict.values()])
        print(','.join(result)) #all non '' elements
        print(','.join(set(result))) #all non '' and non duplicated elements
        

        输出:

        [['222', '111'], ['222', '999', '555']]
        222,111,222,999,555
        222,999,555,111
        [Finished in 0.181s]
        

        【讨论】:

          【解决方案6】:

          您可以在一行中尝试列表理解:

          data={'AAA': {'', '111', '222'}, 'BBB': {'222', '999', '555'}}
          
          print(set([k for i,j in data.items() for k in j if k]))
          

          输出:

          {'222', '999', '111', '555'}
          

          【讨论】:

            猜你喜欢
            • 2022-11-14
            • 1970-01-01
            • 2015-07-23
            • 2014-07-28
            • 1970-01-01
            • 2022-01-02
            • 1970-01-01
            相关资源
            最近更新 更多