2016-02-19 3 views
1

мне нужна помощь с довольно простых упражнений я пытаюсь выполнить, только синтаксически я немного потерялпитон: рекурсивный словарь словарь

в основном я прочитал в очень короткий текстовый файл, содержащий 15 строк из 3 элементов (по существу, 2 ключа и значение)

поместить эти элементы в словарь, состоящий из словарей

1-ый словарь содержит местоположение и второй словарь, который состоит из типа элемента и сколько это стоит для пример

gymnasium weights 15 
market cereal 5  
gymnasium shoes 50 
saloon beer 3 
saloon whiskey 10 
market bread 5 

что привело бы к этому

{ 
    'gymnasium': { 
    'weights': 15, 
    'shoes': 50 
    }, 
    'saloon': { 
     'beer': 3, 
     'whiskey': 10 
    } 
} 

и так далее для других ключей

в основном мне нужно перебрать этот файл, но я изо всех сил, чтобы читать в содержании как Dict из dicts ,

Кроме того, без этой части я не могу понять, как добавить внутренний список во внешний список, если возникает экземпляр ключа во внешнем списке.

Я хотел бы сделать это рекурсивно

location_dict = {} #row #name day weight temp 
item_dict = {} 
for line in file: 
    line = line.strip() 
    location_dict[item_dict['location'] = item_dict` 

ответ

0

Вот другое решение.

yourFile = open("yourFile.txt", "r") 
yourText = yourFile.read() 
textLines = yourText.split("\n") 
locationDict = {} 
for line in textLines: 
    k1, k2, v = line.split(" ") 
    if k1 not in locationDict.keys(): 
     locationDict[k1] = {} 
    else: 
     if k2 not in locationDict[k1].keys(): 
      locationDict[k1][k2] = int(v) 
     else: 
      locationDict[k1][k2] += int(v) 

print locationDict 

Надеюсь, это поможет!

+0

эй! Мне нравится, когда вы приближаетесь, и это помогло. Как вы думаете, вы могли бы рассмотреть эту вторую функциональность, о которой я говорил выше, относительно добавления значений для нескольких экземпляров элемента. все еще действительно застрял на этом и его разочарование! – newtTongue

+0

Привет! Я только что изменил ответ, чтобы добавить функциональность, которую вы упомянули. Стоит упомянуть, что мне пришлось преобразовать значение в целое число с помощью «int», чтобы иметь возможность сделать арифметическую сумму (иначе код будет конкатенацией двух строк).Это работает для вас? –

2

это хорошо использовать для SetDefault (или defaultdict)

data = {} 
for line in file: 
    key1,key2,value = line.split() 
    data.setdefault(key1,{})[key2] = value 

print data 

или на основе вашего комментария

from collections import defaultdict 
data = defaultdict(lambda:defaultdict(int)) 

for line in file: 
    key1,key2,value = line.split() 
    data[key1][key2] += value 

print data 
+0

см http://ideone.com/Lil9jR –

+0

* вес гимнастических 15 * гимназический вес 20 * Рынок зерновые 5 * Рынок зерновые 10 * Рынок зерновые 5 * гимнастическая обувь 50 * салон пиво 3 * салон пиво 7 * Вкус салона 10 * рынок хлеба 5. ======== Спасибо за вашу помощь! Как раз для логистической стороны, как бы вы справились с этой ситуацией, когда есть несколько экземпляров элемента, и я хочу напечатать в своем конечном списке общую стоимость всех значений повторяющихся элементов. поэтому рынок зерновых: напечатал «рынок»: {'зерно: 20}, вес 35 и т. д. и т. д. – newtTongue

+0

Я отредактировал свое решение, включив эту функциональность –

Смежные вопросы