尝试创建一个包含两个键并且具有多个值的字典。
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']}
答案 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)