2016-09-01 12 views
4

この辞書構造を変革します私のアプローチを簡素化する方法。この行は、使用する前に、キーcategoryが辞書にあることを確認するは辞書オブジェクトに

>>> from collections import defaultdict 
>>> 
>>> d = defaultdict(list) 
>>> for key, value in data.items(): 
...  for item in value['category']: 
...   d[item].append(key) 
... 
>>> dict(d) 
{'c': ['a', 'b'], 'd': ['a', 'b']} 

答えて

2
if 'category' in value: 

:私はあなたがカテゴリを反復処理、defaultdict(list)でそれを解決することができるのpython 3.5

4

を使用してキーを追加していますそれ。次に、categoryに対応する辞書から値を取得し、それを繰り返します。 dict.getメソッドでこれを単純化することができます。これは、キーが辞書にない場合は、デフォルト値を返します。だから、categoryが辞書に存在しない場合は、空のリストが返され、ループが反復することは何もありません。この

for cat in value.get('category', []): 

ような何かを行うことができます。


同様に、あなたは(リスト)で、デフォルト値を設定し、キーがcategories辞書に存在するかどうかをチェックする、もしされていません。あなたはこの

categories = {} 
for key, value in data.items(): 
    if isinstance(value, dict): 
     for cat in value.get('category', []): 
      categories.setdefault(cat, []).append(key) 

dict.setdefaultのようなdict.setdefaultでもif...elseは、それがキーに対してデフォルト値を設定し、キーに対応する値を返すことを除いて、dict.getに似ていることを回避することができます。

+0

追加インポート:( – Skeec

+0

@Skeec so?それはもっと読みやすい実装につながりますが、それは内蔵されているので、いつでも利用できます –

+0

これはどのように働くのですか? – Skeec

関連する問題