3

ネストされた辞書と重複キーを使用してデータ構造を作成したい。詳細な例は次のとおりです。

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  

しかし、City/Area の合計エントリ (重複も) を解析している間、カウンター キーまでネストされたループを使用する必要があります。

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

重複キーを持つ辞書の場合、Scorpil によって投稿されたコードが見つかりました

class Dictlist(dict):  
    def __setitem__(self, key, value):  
        try:   
            self[key]   
        except KeyError:   
            super(Dictlist, self).__setitem__(key, [])   
        self[key].append(value)  

Autovivification と Duplicate クラスコードをマージする方法は? または、そのようなシナリオを処理する他のpythonicな方法はありますか?

4

4 に答える 4

1

簡単な方法の 1 つは、それをリストにして、すべての新しいキーをリストに追加することです。

Data['State']['City']['Area'] = []
Data['State']['City']['Area'].append( ID )
于 2016-03-22T13:54:53.447 に答える