2017-02-13 9 views
0

データ標準化の目的で2つの辞書を結合したい...最初の辞書にはリモートデータヘッダーとヘッダー{X:Y}、{Y:Z}の関係を持つ2つの辞書を結合する

Dict 1 = { 
"timestamp": "TimeStamp", 
"name": "SiteName", 
"energy": "PowerExport", 
} 

Dict 2 = { 
"TimeStamp": "13-02-2017 12:34:05", 
"PowerExport": 32, 
"SiteName": "Site 104", 
} 

意図は、それはこのようなものになりますように、これらの2つの辞書をマージすることです...に変換する:

Dict 1 = { 
"timestamp": "13-02-2017 12:34:05", 
"name": "Site 104", 
"energy": 32, 
} 

ので意図が変換することであるが、{X:Y}、{Y :Z}を{X:Z}に追加します。

+0

、インスタンスがあるかもしれませんDict 2には、Dict 1で指定されたすべてのデータマッピングが含まれていません(しかし、Dict 1は、常にすべての必須ヘッダーを持ちます)。さらに、私はDict 2の順序を制御できないので、TimeStampが4位にあるか、または7位に等しくなることがあります。 –

+0

Dictsには順序がないので、2番目の点は適用されません。 –

+0

さて、これをクリアしていただきありがとうございます。混乱を避けるために更新されました! –

答えて

1

これは、単一のdictの理解を行うことができます。

new_dict = {k: dict_2.get(v) for k, v in dict_1.iteritems()} 

これは、キーがdict_2に見つからない場合、それは失敗しないことを確実にするためにgetを使用しています。その場合は値はNoneになります。弁護士には命令がないので、それは心配するものではありません。

+0

魅力のように動作します、迅速な返信をしてくれてありがとう!本当に感謝しています。 –

0

別のオプション、あなたが任意のインポートを使用していない1つのライナーをしたい場合は、次のとおりです。 {key:Dict2[value] for key,value in Dict1.items() if Dict2.has_key(value)}

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](/レビュー/低品質の投稿/ 15196841) – KeyWeeUsr

+0

@KeyWeeUsrそれじゃない? – Nullman

+0

コードのみの回答は、実際には望んでいない+すでに受け入れられている回答とどのように違うのですか?{X:Y}、{Y:Z} – KeyWeeUsr

0

または辞書の理解なし:

文脈に依存
dict1 = { 
    "timestamp": "TimeStamp", 
    "name": "SiteName", 
    "energy": "PowerExport" 
} 
dict2 = { 
    "TimeStamp": "13-02-2017 12:34:05", 
    "PowerExport": 32, 
    "SiteName": "Site 104" 
} 

d = {} 
for k in dict1: 
    if dict1[k] in dict2: 
     d[k] = dict2[dict1[k]] 
関連する問題