我有两个列表
a
我需要一个词典,其中键是c= {2 : 'is', 3 : ['and', 'see', 'the', 'way', 'you'], 4: ['them', 'they', 'what'], 5 : 'treat', 6 : 'become'}
中的数字,值是mydict = {key:value for key, value in zip(b, a)}
print (mydict)
中的词。但是,键的值必须是唯一的。所以,输出是这样的:
{2: 'is', 3: 'and', 4: 'them', 5: 'treat', 6: 'become'}
我试过这个:
{{1}}
这是输出:
{{1}}
答案 0 :(得分:0)
您可以使用defaultdict类,其行为为dict
但可以具有缺失键的默认起始值。以这种方式尝试:
>>> a= ['and', 'people', 'them', 'become', 'treat', 'is', 'they', 'see', 'the', 'way', 'you', 'what']
>>> from collections import defaultdict
>>> c=defaultdict(list)
>>> for x in a: c[len(x)].append(x)
>>> print(c)
defaultdict(<class 'list'>, {2: ['is'], 3: ['and', 'see', 'the', 'way', 'you'], 4: ['them', 'they', 'what'], 5: ['treat'], 6: ['people', 'become']})
然后您可以像往常一样dict
使用它:
>>> for k,v in c.items():
>>> print(k, ' : ', v)
2 : ['is']
3 : ['and', 'see', 'the', 'way', 'you']
4 : ['them', 'they', 'what']
5 : ['treat']
6 : ['people', 'become']
答案 1 :(得分:0)
dict={}
for i in xrange(len(b)):
if b[i] not in dict:
dict[b[i]]=[a[i]]
else:
dict[b[i]].append(a[i])
print dict
您将获得所需的结果。
{2: ['is'], 3: ['and', 'see', 'the', 'way', 'you'], 4: ['them', 'they', 'what'],5: ['treat'], 6: ['people', 'become']}
答案 2 :(得分:-1)
正如我在my comment中所指出的,这意味着处理三种情况:
为了做到你想要的,所以:
mydict = {}
for key, value in zip(map(len, a), a):
# 1.
if key not in mydict:
mydict[key] = value
# 2.
elif isinstance(mydict[key], str):
mydict[key] = [mydict[key], value]
# 3.
else:
mydict[key].append(value)
请注意使用map
和len
来获取动态长度。
但是,正如您所看到的,这非常复杂,现在您有一个具有异构值类型的字典,这进一步使其他处理变得复杂。相反,我建议始终使用列表作为值,即使只有一个字符串:
mydict = {}
for key, value in zip(map(len, a), a):
if key not in mydict:
mydict[key] = []
mydict[key].append(value)
这显然更整洁,可能会简化您的任何其他步骤。您可以使用dict.setdefault
方法或collections.defaultdict
对象进一步简化此代码,该对象专为此类事件而设计。