2011-07-30 14 views
0

以下のネストされた辞書の各インスタンスの値を$tに戻すのは苦労しています。私がする必要があるのは、それぞれのキーと値のペアを引き出し、別々の辞書に個別に追加することです。ここで重複するキーで異なる値を持つネストされた辞書

はJSONです:

"breed": [ 
      { 
       "$t": "Chihuahua" 
      }, 
      { 
       "$t": "Jack Russell Terrier" 
      } 
     ] 

ちなみに、私は、Python 2.7

答えて

1

にこのような何かを使用していますか?

>>> o = [ { "$t": "Chihuahua" }, { "$t": "Jack Russell Terrier" } ] 
>>> [ item["$t"] for item in o ] 
['Chihuahua', 'Jack Russell Terrier'] 
>>> 
+0

は似たものを試しましたが、私は常にエラー得るように見える「という文字列のインデックスは整数でなければなりません例外TypeErrorを」 – JonNewb

0

これはお探しのものですか? (それは私はあなたが同じ$tに対応する複数の値を処理する方法に考える依存します。)

nestedDict = { "breed": [ 
         { 
         "$t": "Chihuahua" 
         }, 
         { 
          "$t": "Jack Russell Terrier" 
          } 
         ] 
       } 

dictEntries = [ (k, v) for dicList in nestedDict.values() for d in dicList for (k, v) in d.items() ] 

flattenedDict = { } 
for k, v in dictEntries: 
    flattenedDict.setdefault(k, []).append(v) 

print (flattenedDict) 

これがあなたに与えます:

{'$t': ['Chihuahua', 'Jack Russell Terrier']} 
+0

これはこの例のjsonでうまくいきますが、アプリケーションのコンテキストで実行すると、「unicode」オブジェクトの属性に 'items'という属性がありません。コマンドラインから出力をコピーすると、私は次のようになります。 'breeds':{u '$ t':u'Domestic Short Hair '}出力はユニコードです。何かご意見は?再度、感謝します。私は今本当に近いと思う!ところで、私はアプリケーションをループするとき、品種の下に出力される項目の数は可変です。これが違いを生むかどうかはわかりません。 – JonNewb

+0

Aha:そうですね、 '' breeds ':{u' $ t ':u'Domestic Short Hair'} ' - 'breeds'に関連付けられた値は単一の辞書です。しかし、あなたの元の投稿では、それは辞書のリストです。私はそれがUnicode固有のものではなく、違いだと思う。 – slothrop

0

私はあなたがやろうとしているものに理解していません。 JSONからPython dictを作成したい場合、ansは "$ t"キーで値を取得します。ここではそうではありません(コメントではなく、私は答えを削除します)。

# Many thanks to Dogbert, whose answer I copied the list comprehension from 
# (changing a few things), and many thanks to slothrop, whose answer gave me 
# ideas for my variable name. Not for those people, I would have used a silly 
# name like `thing` and would have used a for loop. 
import json 

nested_dict = json.loads('{"breed": [{"$t": "Chihuahua"}, ' 
            '{"$t": "Jack Russell Terrier"}]}') 
[dic["$t"] for dic in nested_dict["breed"]] 

あなたのdict内部のすべての辞書のキーと値のペアが必要な場合:I:

key_and_value_pairs = [] 
for dic in nested_dict["breed"]: 
    key_and_value_pairs.extend(dic.items()) 
関連する問題