Python字典(key1,key2)将多个值附加到同一个密钥对

时间:2016-11-18 21:52:34

标签: python list dictionary

尝试创建一个包含两个键并且具有多个值的字典。

myList = [[('2016-11-01', 'USD'), 'ECB News'],
         [('2016-11-01', 'USD'), 'FED News'],
         [('2016-11-02', 'EUR'), 'Brexit News'],
         [('2016-11-03', 'USD'), 'Yellen Speaking']]

myDict = defaultdict(lambda: defaultdict(list))
for d, value in myList:
    print(d, value)
    myDict[d].append(value)  #<<<----- Error here

print(myDict)

得到错误:

   myDict[d].append(value)
AttributeError: 'collections.defaultdict' object has no attribute 'append'

预期输出:将相同的密钥对值附加在一起。

{[('2016-11-01', 'USD'): 'ECB News', 'FED News'],
         [('2016-11-02', 'EUR'): 'Brexit News'],
         [('2016-11-03', 'USD'): 'Yellen Speaking']}

3 个答案:

答案 0 :(得分:2)

我认为您需要dict对象,但您提到了无效格式作为必需结果。要获得字典,您可以使用collections.defaultdict作为:

from collections import defaultdict

new_dict = defaultdict(list)  # <-- You do not need `lambda` here
for k, v in myList:
    new_dict[k].append(v)

# `new_dict` holds the value:
# {('2016-11-02', 'EUR'): ['Brexit News'], 
# ('2016-11-01', 'USD'): ['ECB News', 'FED News'], 
# ('2016-11-03', 'USD'): ['Yellen Speaking']})

其中myList是问题中提到的列表。

答案 1 :(得分:0)

您需要使用列表,以便可以追加它们:

myDict = {}    
for d, value in myList:
    myDict.setdefault(d,[]).append(value)

Ouptput myDict:

 {('2016-11-01', 'USD'): ['ECB News', 'FED News'],
  ('2016-11-02', 'EUR'): ['Brexit News'],
  ('2016-11-03', 'USD'): ['Yellen Speaking']}

setdefault()方法创建一个空列表,如果该键尚不存在或返回已创建的列表,那么您可以追加另一个值

答案 2 :(得分:0)

你想这样做吗?

from collections import defaultdict

myList = [(('2016-11-01', 'USD'), 'ECB News'),
      (('2016-11-01', 'USD'), 'FED News'),
      (('2016-11-02', 'EUR'), 'Brexit News'),
      (('2016-11-03', 'USD'), 'Yellen Speaking')]

myDict = defaultdict(list)
for d, value in myList:
    print(d, value)
    myDict[d].append(value)  #<<<----- Error here

print(myDict)