2

名前と住所を含む辞書と、名前と電話番号を含む別の辞書があれば、出力で両方をマージする(互いに上書きしない)小さなプログラムを作成しようとしています。最終的な出力辞書には、名前、住所(利用可能な場合)、電話番号(利用可能な場合)が含まれている必要があります。次に例を示します。

addr = {'George': 'via Wagner, 23', 'White': 'Piazza Bologna, 1',
    'L. Red': 'via A. Einstein, 12', 'Pete': 'via Pio'}
phone = {'Mark': '347 8987989', 'George': '06 89786765',
     'Mauro B.': '3489878675', 'Pete': '07897878', 'L. Red': '09877887'}

そして最後の辞書:

addr_phone(addr, phone) -->
{'George':    {'address': 'via Wagner, 23'},
 'Mark':      {'phone': '347 8987989'},
 'George':    {'phone': '06 89786765'},
 'L. Red':   {'phone': '09877887', 'address': 'via A. Einstein, 12'},
 'Pete':       {'phone': '07897878', 'address': 'via Pio'},
 'Mauro B.':   {'phone': '3489878675'},
 'White': {'address': 'Piazza Bologna, 1'}}

私はこれを書いてみました:

def addr_phone(addr, phone):
    d3={}
    d3.update(addr)
    d3.update(phone)
    for k,v in phone.items():
        if k not in addr:
            d3[k]=v
    return d3

しかし、私は同じ名前の複数のインスタンスを取得し、それは私が望むものではありません。ご協力いただきありがとうございます。

4

1 に答える 1

4

を使用しdefaultdictます:

from collections import defaultdict

out = defaultdict(dict)
for name, phonenumber in phone.iteritems():
    out[name]['phone'] = phonenumber
for name, address in addr.iteritems():
    out[name]['address'] = address

.iteritems()Python 3の場合は、次のように置き換え.items()ます。

out = defaultdict(dict)
for name, phonenumber in phone.items():
    out[name]['phone'] = phonenumber
for name, address in addr.items():
    out[name]['address'] = address

名前ごとに値を新しいディクショナリに移動するため、両方の入力ディクショナリをループする必要があります。

于 2012-10-29T08:43:54.767 に答える