Python 合并两本词典

Python 合并两本词典,python,dictionary,Python,Dictionary,所以我有两本字典 Dictionary 1 looks like this: {'aaien': ['01, 02, 12'], 'aan': ['10']} Dictionary 2 looks like this: {'01:': ['pronoun'], '02': ['I'],'03': ['we']} 现在我想写一个函数或代码,它结合了这两个字典,结果应该是: “aaien”:[“代词,我,情感”] 到目前为止,我得到的是: for word, nums in d1.items():

所以我有两本字典

Dictionary 1 looks like this: {'aaien': ['01, 02, 12'], 'aan': ['10']}
Dictionary 2 looks like this: {'01:': ['pronoun'], '02': ['I'],'03': ['we']}
现在我想写一个函数或代码,它结合了这两个字典,结果应该是: “aaien”:[“代词,我,情感”]

到目前为止,我得到的是:

for word, nums in d1.items():
    print word, "->",
    for num in nums:
        if d2.has_key(num):
            print d2[num],
    print

使用
collections.defaultdict()

[60]中的
dic1={'aaien':['01,02,12'],'aan':['10']}
在[61]:dic2={'01':['deone'],'02':['I'],'03':['we']}中,在修正'01:'
在[62]中:dic3=defaultdict(列表)
[63]中:对于dic1.items()中的x,y:
keys=map(str.strip,y[0]。拆分(“,”)#在“,”处拆分,然后应用str.strip
对于k in键:
如果dic2中有k:#如果dic2中有键
dic3[x].扩展(dic2[k])
....:             
In[64]:dic3
Out[64]:defaultdict(,{'aaien':['deone','I']})

使用
集合。defaultdict()

[60]中的
dic1={'aaien':['01,02,12'],'aan':['10']}
在[61]:dic2={'01':['deone'],'02':['I'],'03':['we']}中,在修正'01:'
在[62]中:dic3=defaultdict(列表)
[63]中:对于dic1.items()中的x,y:
keys=map(str.strip,y[0]。拆分(“,”)#在“,”处拆分,然后应用str.strip
对于k in键:
如果dic2中有k:#如果dic2中有键
dic3[x].扩展(dic2[k])
....:             
In[64]:dic3
Out[64]:defaultdict(,{'aaien':['deone','I']})

我建议您先修复dict,然后使用
dict.setdefault

d1 = {k:map(str.strip,v[0].split(',')) for k,v in d1.iteritems()}
d2 = {k.strip(':'):v for k,v in d2.iteritems()}

result = {}
for k,v in d1.iteritems():
    for i in v:
        if i in d2:
            result.setdefault(k,[]).extend(d2[i])
print result
输出:


我建议您先修复dict,然后使用
dict.setdefault

d1 = {k:map(str.strip,v[0].split(',')) for k,v in d1.iteritems()}
d2 = {k.strip(':'):v for k,v in d2.iteritems()}

result = {}
for k,v in d1.iteritems():
    for i in v:
        if i in d2:
            result.setdefault(k,[]).extend(d2[i])
print result
输出:

在你“修正”你的口述之后(正如其他人所建议的) 我希望他们看起来像这样

d1 = {'aaien': ['01', '02', '12'], 'aan': ['10']}
d2 = {'01': 'pronoun', '02': 'I', '03': 'we'}
然后试试这个:

print {k: [d2.get(l) for l in v] for k, v in d1.iteritems()}
{'aaien': ['pronoun', 'I', None], 'aan': [None]}
值已被替换,并且在没有可用值的情况下未放置任何值

如果你真的想让你的查找dict(d2)值成为值的列表,我需要更多的信息。你想要列表的列表还是平铺的列表

即通过查找

d2 = {'01': ['pronoun'], '02': ['I', 'spam'], '03': ['we']}
你想要这些中的哪一个

{'aaien': ['pronoun', 'I', 'spam', None], 'aan': [None]}
{'aaien': ['pronoun', ['I', 'spam'], None], 'aan': [None]}
在你“修正”你的口述之后(正如其他人所建议的) 我希望他们看起来像这样

d1 = {'aaien': ['01', '02', '12'], 'aan': ['10']}
d2 = {'01': 'pronoun', '02': 'I', '03': 'we'}
然后试试这个:

print {k: [d2.get(l) for l in v] for k, v in d1.iteritems()}
{'aaien': ['pronoun', 'I', None], 'aan': [None]}
值已被替换,并且在没有可用值的情况下未放置任何值

如果你真的想让你的查找dict(d2)值成为值的列表,我需要更多的信息。你想要列表的列表还是平铺的列表

即通过查找

d2 = {'01': ['pronoun'], '02': ['I', 'spam'], '03': ['we']}
你想要这些中的哪一个

{'aaien': ['pronoun', 'I', 'spam', None], 'aan': [None]}
{'aaien': ['pronoun', ['I', 'spam'], None], 'aan': [None]}


您确定示例中的所有引号都正确吗?另外,
affect
从何而来?因此您并不是真正地合并字典,而是使用一个作为查找来替换另一个字典中的值?affect是数字12的单词…是的,没错。。。但我是一个初学者,我不知道如何从查找开始,然后替换值。你确定示例中的引号都正确吗?还有,
影响
从何而来?所以你不是真的结合字典,但使用一个作为查找来替换另一个中的值?影响是数字12随附的单词…是的,没错。。。但是我是一个初学者,我不知道如何从查找开始,然后替换值..+1。但是如果dic2中的k:,您并不真正需要
;您只需
dic3[x].extend(dic2.get(k,[])
。0@abarnert但它也会添加类似于
'aan':[]
的内容。事实上,这正是我认为OP想要的,我没有想到你的版本不会这样做……你是对的,它们是不同的,我不知道OP上到底想要哪个,因为数据不完整。所以,没关系。对不起,我得再考虑一下。。我需要做的任务是如此复杂,以至于我很难弄清楚到底需要做什么。。所以在我能说更多之前,我必须想一想。。。我希望我已经对Python+1有了更多的了解。但是如果dic2中的k:
,您并不真正需要
;您只需
dic3[x].extend(dic2.get(k,[])
。0@abarnert但它也会添加类似于
'aan':[]
的内容。事实上,这正是我认为OP想要的,我没有想到你的版本不会这样做……你是对的,它们是不同的,我不知道OP上到底想要哪个,因为数据不完整。所以,没关系。对不起,我得再考虑一下。。我需要做的任务是如此复杂,以至于我很难弄清楚到底需要做什么。。所以在我能说更多之前,我必须想一想。。。我希望我对Python有更多的了解,我必须多考虑一下。。我需要做的任务是如此复杂,以至于我很难弄清楚到底需要做什么。。所以在我能说更多之前,我必须想一想。。。我希望我对Python有更多的了解,我必须多考虑一下。。我需要做的任务是如此复杂,以至于我很难弄清楚到底需要做什么。。所以在我能说更多的话之前,我必须想。。。我希望我已经对Python有了更多的了解