从python中的两个列表创建一个字典,匹配每个单词中的字母数

时间:2016-03-16 07:39:49

标签: python dictionary

我有两个列表

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}}

3 个答案:

答案 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中所指出的,这意味着处理三种情况:

  1. 尚未出现的钥匙
  2. 键存在,值为字符串
  3. 密钥存在,值为列表
  4. 为了做到你想要的,所以:

    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)
    

    请注意使用maplen来获取动态长度。

    但是,正如您所看到的,这非常复杂,现在您有一个具有异构值类型的字典,这进一步使其他处理变得复杂。相反,我建议始终使用列表作为值,即使只有一个字符串:

    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对象进一步简化此代码,该对象专为此类事件而设计。