1

こんにちは、単に更新するのではなく、共通の値で何かをしたい場合はどうすればよいですか。たとえば、値が文字列であり、それらの間に単純なタブを置きたいとしましょう

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

4 に答える 4

2

最初に辞書をマージしてから、共通のキーを個別に処理できます。

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

Python 2.7 を使用している場合は、より効率的なa.viewkeys() & b.viewkeys()の代わりに を使用できますset(a) & set(b)

于 2013-10-21T16:54:57.607 に答える
1

これを試してみてください。Python 2.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'}

イテレータを使用する場合は、Python 2.x で次のようにします。

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

同様に、Python 3.x でこれを行います。

{ k:a.get(k,'') + '\t' + b.get(k,'') for k in set(it.chain(a.keys(), b.keys())) }
于 2013-10-21T16:55:00.307 に答える