【问题标题】:Dictionary with multiple values to tuple具有多个值的字典到元组
【发布时间】:2019-02-14 07:32:35
【问题描述】:

我有一个包含多个值的字典:

dict_a = {1: {'a':1, 'b':2, 'c':3},  2:{'a': 4, 'b':5, c:'6'}}

.
我想要这样的结果:

[('a',(1,4)),('b',(2,5)), ('c',(3,6))]  

我写了一段代码:

for keys, values in dict_a:  
    for k, v in values:  
        print(v)  

但结果就像('a',1),('b',2).... 我有点卡在这里。谁能帮我解决这个问题!!!

【问题讨论】:

  • 打印不用于处理数据。
  • 如果一个字符(如a)只出现一次或出现两次以上怎么办?您是否希望在您想要的结果中跟随字符的元组长度发生变化?此外,结果真的应该是一个元组列表还是另一个字典?如果是列表,列表中项目的顺序是否重要?
  • 我只是在这里检查输出@Deniziloe。
  • 您想重塑您的字典并对字典中包含在值中的键进行分组?
  • 是的,我在嵌套字典中预定义了键...所以,a、b、c 将始终是 a、​​b、c。但我需要将值与另一个字典中的特定键进行比较和提取。所以,我很期待对键进行分组,这样我就可以通过比较键来直接获取值

标签: python list dictionary tuples list-comprehension


【解决方案1】:

您可以使用列表推导:

dict_a = {1: {'a':1, 'b':2, 'c':3}, 2: {'a':4, 'b':5, 'c':6}}

res = [(k, tuple(d[k] for d in dict_a.values())) for k in dict_a[1]]

[('a', (1, 4)), ('b', (2, 5)), ('c', (3, 6))]

假设:

  1. dict_a 按外键排序,在 Python 3.6+ 中可能是自动的。否则,请使用collections.OrderedDict
  2. dict_a 的每个字典值中的键都是相同的。

【讨论】:

    【解决方案2】:

    使用collections.defaultdict

    设置

    from collections import defaultdict    
    dct = defaultdict(tuple)
    

    for _, v in dict_a.items():
        for el in v:
            dct[el] += (v[el],)
    
    print(list(dct.items())
    

    [('a', (1, 4)), ('b', (2, 5)), ('c', (3, '6'))]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 2015-12-04
      • 1970-01-01
      • 2014-01-05
      相关资源
      最近更新 更多