Вложенный словарь с дублирующимися ключами, но разными значениями - PullRequest
0 голосов
/ 30 июля 2011

Мне трудно вернуть значения каждого экземпляра $t во вложенном словаре ниже.Что мне нужно сделать, это вытащить каждую из пар ключ-значение и добавить их отдельно в другой словарь.

Вот JSON:

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

Кстати, я использую Python 2.7

Ответы [ 3 ]

1 голос
/ 30 июля 2011

Как то так?

>>> o = [ { "$t": "Chihuahua" }, { "$t": "Jack Russell Terrier" } ]
>>> [ item["$t"] for item in o ]
['Chihuahua', 'Jack Russell Terrier']
>>>
0 голосов
/ 31 июля 2011

Я не понял, что ты пытаешься сделать.Если вы хотите создать Python dict из JSON и получить его значения с помощью клавиши "$ 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"]]

Если вам нужнопары ключ-значение каждого дикта в вашем диктанте:

key_and_value_pairs = []
for dic in nested_dict["breed"]:
    key_and_value_pairs.extend(dic.items())
0 голосов
/ 31 июля 2011

Это то, что вы ищете?(Это зависит от того, как вы хотите обработать несколько значений, соответствующих одному и тому же $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']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...