Вложенный словарь Python - PullRequest
       14

Вложенный словарь Python

1 голос
/ 10 ноября 2011

Как мне создать вложенный словарь в Python Итак, я хочу, чтобы данные были в этой форме ..

{Category_id: {Product_id:... productInstance},{prod_id_1: this instance}}

В основном, если я сделаю что-то подобное допустим, я хочу проверить, является ли

product_id = 5 is in category 1.

так что если я сделаю

Dict[1].has_key(5)--> be true or false..

Мой плохой код

fin = readFile(db)
categoryDict = defaultdict(list)
itemDict ={}
for line in fin:
    itemInstance = setItemInstances(line)

    itemDict[itemInstance._product_id] = itemInstance
    categoryDict[itemInstance._category_id].append(itemDict)




EDIT: example
dict = {1: { p_id: p_instance_1,
           p_id_2: p_ins_2}
     2:{ p_in_this_cat_id: this isntance}}

БЛАГОДАРЯ

Ответы [ 3 ]

7 голосов
/ 10 ноября 2011

Я думаю, это ближе к тому, что вы хотите:

fin = readFile(db)
categoryDict = defaultdict(dict)     # automatically create a subdict
for line in fin:
    itemDict = {}                    # a new innermost dict for every item
    itemInstance = setItemInstances(line)
    itemDict[itemInstance._product_id] = itemInstance
    categoryDict[itemInstance._category_id] = itemDict
1 голос
/ 30 апреля 2013

Проверьте мой класс NestedDict здесь: https://stackoverflow.com/a/16296144/2334951

>>> branches = [b for b in data.paths()]
>>> ['plumbers' in k for k in branches]
[True, False, True, False, False, False]
>>> any(['plumbers' in k for k in branches])
True
>>> [k for k in branches if 'plumbers' in k]
[['new york', 'queens county', 'plumbers'], ['new jersey', 'mercer county', 'plumbers']]
>>> [data[k] for k in branches if 'plumbers' in k]
[9, 3]

Я надеюсь, что с некоторой интуицией этот пример охватывает вопрос.

1 голос
/ 10 ноября 2011

Dicts в python - это всегда «коллекция» «элементов»; каждый «элемент» представляет собой ключ и значение, разделенные двоеточием, а каждый элемент разделяется следующим запятой. Элемент не может иметь более одного ключа или значения, но вы можете иметь коллекции в качестве ключей или значений.

Глядя на ваш второй пример:

dict = {1: { p_id: p_instance_1,
           p_id_2: p_ins_2}
     2:{ p_in_this_cat_id: this isntance}}

внешнему диктовку нужна еще одна запятая, между концом первого элемента (с ключом 1) и вторым (с ключом 2).

Кроме того, не совсем понятно, что означает this instance, но часто бывает так, что методы объектов передают сам объект в качестве первого параметра, и по соглашению это называется self, но может быть дано любое имя (и это иногда делается для уменьшения путаницы, например, с метаклассами)

Наконец; голые слова, p_id и т. д., редко действительны, если они не являются именем переменной (назначенной ранее) или атрибутом другого объекта (возможно, self.p_id). Я не знаю, в этом ли проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...