1

我有两个这样创建的字典:

tr = defaultdict(list)
tr = { 'critic' : '2_critic', 
 'major' : '3_major',
 'all' : ['2_critic','3_major']
 }

第二个:

scnd_dict = defaultdict(list)

并包含这样的值:

scnd_dict = {'severity': ['all']}

我想要第三个字典,它将包含 的键scnd_dict及其对应的值 from tr。这样,我将拥有:

third_dict = {'severity' : ['2_critic','3_major']}

我试过这个,但它没有用:

for (k,v) in scnd_dict.iteritems() :
  if v in tr:
    third_dict[k].append(tr[v])

任何帮助,将不胜感激。谢谢。

4

6 回答 6

2

好...

from collections import defaultdict

tr = {'critic' : '2_critic', 
      'major' : '3_major',
      'all' : ['2_critic','3_major']}

scnd_dict = {'severity': ['all']}

third_dict = {}

for k, v in scnd_dict.iteritems():
    vals = []
    if isinstance(v, list):
        for i in v:
            vals.append(tr.get(i))
    else:
        vals.append(tr.get(v))
    if not vals:
        continue
    third_dict[k] = vals

print third_dict

结果:

>>> 
{'severity': [['2_critic', '3_major']]}

会做你想做的。但我质疑在这里使用 defaultdicts 的逻辑,或者让你的索引成为列表的一部分......


如果您使用非列表,scnd_dict那么您可以更轻松地完成整个事情。假设scnd_dict看起来像这样scnd_dict = {'severity': 'all'}

d = dict((k, tr.get(v)) for k, v in scnd_dict.items())
# {'severity': ['2_critic', '3_major']}
于 2013-06-04T07:42:15.370 回答
1

您的问题是这v是一个列表,而不是列表中的一个项目。所以,if v in tr:将是错误的。更改您的代码,以便您遍历其中的项目v

于 2013-06-04T07:38:02.540 回答
0
third_dict = {k: tr[v[0]] for k, v in scnd_dict.iteritems() if v[0] in tr}

tr = defaultdict(list)

如果您只是tr在下一行重新绑定,那是浪费时间。同样对于scnd_dict. 制作列表的所有值是一个更好的主意tr——即使它们只有一个项目。这意味着以后需要担心的特殊情况会减少。

于 2013-06-04T07:37:17.593 回答
0
third_dict = {k: [t for m in ks for t in tr[m]] for k,ks in scnd_dict.iteritems()}
于 2013-06-04T07:37:56.613 回答
0

第二个 dict 的值是 list,而不是 str,所以代码会起作用

for (k, v) in send_dict.iteritems():
    if v[0] in tr.keys():
        third_dict[k] = tr[v[0]]
于 2013-06-04T07:46:55.553 回答
0

问题是第三个字典不知道值是一个列表

for k in scnd_dict:
    for v in scnd_dict[k]:
        print v
        for k2 in tr:
            if v==k2:
                if k not in third_dict:
                    third_dict[k]=tr[k2]
                else:
                    third_dict[k]+=tr[k2]
于 2013-06-04T08:00:53.017 回答