ネストされた辞書と重複するキーでデータ構造を作成したいと思います。詳細な例は以下のとおりです。Pythonで重複するキーでネストされた辞書を作成する方法
data['State1']['Landon']['abc Area'] = 'BOB'
data['State1']['Landon']['abc Area'] = 'SAM'
data['State1']['Landon']['xyz Area'] = 'John'
data['State2']['New York']['hjk Area'] = 'Ricky'
for z in data['State1'].keys() ,
# I should get list ['Landon', 'Landon', 'Landon']
for y in data['State1']['Landon'].keys() ,
# I should get list ['abc Area', 'abc Area', 'xyz Area']
現在のデータを保存するために私が使用している余分なカウンター市/エリアの総エントリ(重複同様)を解析している間、私はネストされた使用する必要が
data = Autovivification()
data[state][city][area][counter] = ID
しかし、キーカウンターキーまでループします。ネストされた辞書用
for city in data['State1'].keys():
for area in data['State1'][city].keys():
for counter in data['State1'][city][area].keys():
for temp in data['State1'][city][area][counter].values():
cityList.append(city)
areaList.append(area)
、私はnosklo
class AutoVivification(dict):
"""Implementation of perl's autovivification feature."""
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
value = self[item] = type(self)()
return value
によって投稿次のコードを発見し、重複キーを持つ辞書のために、私はコードがAutovivificationをマージする方法Scorpil
class Dictlist(dict):
def __setitem__(self, key, value):
try:
self[key]
except KeyError:
super(Dictlist, self).__setitem__(key, [])
self[key].append(value)
により投稿されました重複したクラスコード?またはそのようなシナリオを処理するための他のpythonic方法はありますか?
Data['State']['City']['Area'] = []
Data['State']['City']['Area'].append(ID)
あなたは説明できます、なぜあなたが重複キーが必要なのでしょうか? 'エリア'が複数のIDを追加できるリストになっても問題ありませんか? –
@germn:私は詳細な説明で質問を編集しました。 – Aniketan
をチェックしてください。あなたが与えられたデータに必要なリストを返す新しい 'items_in'関数を追加しました。 dict/list構造を扱う関数を実装するのが簡単で分かりやすく、新しい構造を実装しようとしているでしょう。 –