【问题标题】:Adding multiple lists of different values to to same keys in a dictionary将多个不同值的列表添加到字典中的相同键
【发布时间】:2014-09-23 01:40:42
【问题描述】:

不使用 defaultdict 最简单的方法是什么?如果使用核心 python 功能执行此操作太麻烦,那么 defaultdict 就可以了。

我有一个键列表作为列表。

我有一个短循环来创建一些带有值的列表,我想将其中的值映射到字典中的键。

所以,最后我会得到每个键的多个值。然后打印。

这就是我目前所拥有的......

Keys = ['A','B','C'] #the keys that will be mapped to all values start here in a list               
Values = [] #starting with empty values
Dict = dict(zip(Keys, Values)) #starting with a dict of keys mapped to empty values

x=0
while x < 5:
    x += 1 
    MoreValues = [1+x,2+x,3] #adding x only to give some different values
    Dict = dict(zip(Keys, MoreValues))

    print Dict

这段代码的输出是:

{'A': 2, 'C': 3, 'B': 3}
{'A': 3, 'C': 3, 'B': 4}
{'A': 4, 'C': 3, 'B': 5}
{'A': 5, 'C': 3, 'B': 6}
{'A': 6, 'C': 3, 'B': 7}   

看待这个问题的另一种方式是,如何将这些结果字典合并在一起,以便将 A、B、C 的键映射到这些多个值,假设这个设置带有一个 for 循环来生成值列表。

输出应该是:

{'A': [2, 3, 4, 5, 6], 'C': [3, 3, 3, 3, 3], 'B': [3, 4, 5, 6, 7]}

【问题讨论】:

  • 你为什么不想使用默认字典?
  • 我想看看如何通过核心python功能做到这一点,但是如果太麻烦那么defaultdict就可以了。
  • 这里有几种方法:stackoverflow.com/questions/5946236/…
  • 在那个例子中,有多个字典具有相同的键。在这个例子中,它是多个值列表映射到一个带有键的字典。
  • 在循环结束时你想要什么输出?我很难理解你在这里真正想要的是什么。 . .

标签: python list dictionary


【解决方案1】:

你也可以使用 defaultdict

from collections import defaultdict
d = defaultdict(lambda: [])

for x in range(5):
    for key in keys:
        d[key].append(x)

【讨论】:

    【解决方案2】:
    keys = "ABC"
    answer = {}
    
    x = 1
    while x<5:
        for key in keys:
            if key not in answer:
                answer[key] = []
            answer[key].append(x)
        x += 1
    

    当然,您可以将初始化移出 while 循环:

    keys = "ABC"
    answer = {}
    for key in keys:
        if key not in answer:
            answer[key] = []
    
    x = 1
    while x<5:
        for key in keys:
            answer[key].append(x)
        x += 1
    

    【讨论】:

      【解决方案3】:

      你可以试试这个代码:所以如果你不能依赖某些部分,我会写下所有细节,请询问:

      >>> d1={'A': 2, 'C': 3, 'B': 3l}
      >>> d2={'A': 3, 'C': 3, 'B': 4}
      >>> d3={'A': 4, 'C': 3, 'B': 5}
      >>> d4={'A': 5, 'C': 3, 'B': 6}
      >>> d5={'A': 6, 'C': 3, 'B': 7}
      >>> keys=[d1.keys(),d2.keys(),d3.keys(),d4.keys(),d5.keys()]
      >>> values=[d1.values(),d2.values(),d3.values(),d4.values(),d5.values()]
      >>> keys
      [['A', 'C', 'B'], ['A', 'C', 'B'], ['A', 'C', 'B'], ['A', 'C', 'B'], ['A', 'C', 'B']]
      >>> values
      [[2, 3, 3], [3, 3, 4], [4, 3, 5], [5, 3, 6], [6, 3, 7]]
      >>> set_keys=[set(list(i)).pop() for i in zip(*keys)]
      >>> set_keys
      ['A', 'C', 'B']
      >>> set_values=zip(*values)
      >>> set_values
      [(2, 3, 4, 5, 6), (3, 3, 3, 3, 3), (3, 4, 5, 6, 7)]
      >>> set_values=map(list,zip(*values))
      >>> set_values
      [[2, 3, 4, 5, 6], [3, 3, 3, 3, 3], [3, 4, 5, 6, 7]]
      >>> dict(zip(set_keys,set_values))
      {'A': [2, 3, 4, 5, 6], 'C': [3, 3, 3, 3, 3], 'B': [3, 4, 5, 6, 7]}
      >>> 
      

      【讨论】:

        猜你喜欢
        • 2021-08-21
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多