两部词典的合并及其共同价值的处理

2024-09-27 20:19:12 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,如果我想用公共值做些什么,而不是仅仅更新它们呢。例如,假设值是一个字符串,我想在它们之间放置一个简单的制表符

a={'car':'ferrari','color':'red','driver':'M'} 
b={'car':'lamborghini','color':'yellow','transmission':'manual'}

结果是

merge_ab={'car':'ferrari\tlamborghini','color':'red\tyellow','driver':'M\t','transmission':'\tmanual'}

Tags: 字符串abdriverredmergemanualcar制表符
3条回答

这里有一个很好的python方法:

dicts = [a, b]
allKeys = set(k for d in dicts for k in d.iterkeys())
makeValue = lambda k: '\t'.join(d.get(k, '') for d in dicts) # Make merged value for a given key
merged = dict((k,makeValue(k)) for k in allKeys)

试试这个,它将在Python2.x中工作:

{ k:a.get(k, '') + '\t' + b.get(k, '') for k in set(a.keys() + b.keys()) }

=> {'color': 'red\tyellow', 'car': 'ferrari\tlamborghini',
    'driver': 'M\t', 'transmission': '\tmanual'}

如果要使用迭代器,请在Python2.x中执行以下操作:

import itertools as it
{k:a.get(k,'')+'\t'+b.get(k,'') for k in set(it.chain(a.iterkeys(),b.iterkeys()))}

等价地,在Python3.x中执行此操作:

{ k:a.get(k,'') + '\t' + b.get(k,'') for k in set(it.chain(a.keys(), b.keys())) }

您可以先合并dict,然后分别处理公共密钥:

merge_ab = dict(a, **b)
for key in set(a) & set(b):
    merge_ab[key] = '{0}\t{1}'.format(a[key], b[key])

如果您使用的是python2.7,那么可以使用效率更高的a.viewkeys() & b.viewkeys()而不是set(a) & set(b)。你知道吗

相关问题 更多 >

    热门问题