Как рассчитать входные данные из словарей? - PullRequest
0 голосов
/ 02 апреля 2019

Я новичок в Python и пытаюсь понять наборы и дикты,

У меня есть словарь (abc), и моя цель - показать соотношение каждой части словаря (Sticks [Vacum / Broom],Камни [Вакуум / Метла], Кости [Вакуум / Метла]):

abc =   {"Sticks" :{"brooms":8061, "vaccums":2721},
     "Stones":{"brooms":8399, "vaccums":2873},
     "Bones":{"brooms":7706, "vaccums":2654}}

Мой ввод:

  print(abc["Sticks(vaccums)"]]/abc["Sticks(brooms)"]])

Произошла ошибка: TypeError: 'builtin_function_or_method' объект не может быть подписан

Требуется вывод:

Stones 0.342
Bones  0.344
Sticks 0.338

Что не так с моим кодом?каков синтаксис для вычисления, взяв ввод от dict

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Похоже, вы хотите получить доступ к значениям словаря.«Рут» выглядит как нечто случайное в отношении вашего вопроса.

abc - это вложенный словарь.Это выглядит так: abc ['Key'], а значением ключа является словарь {"метлы": 8061, "вакуумы": 2721}.

, поэтому вы можете использовать значения функций() для abc ['Sticks'], так как в качестве значения у него будет словарь, который, в свою очередь, имеет нужные значения.

   sum(abc['Sticks'].values()) / len(abc['Sticks'].values())

   sum(abc['Stones'].values()) / len(abc['Stones'].values())

   sum(abc['Bones'].values()) / len(abc['Bones'].values())

вы должны пройти через те, которые имеют цикл или понимание списка.

РЕДАКТИРОВАНИЕ:

кажется, что это то, что вы хотите, просто доступ к значениям вложенного словаря.

abc['Bones']['vaccums'] / abc['Bones']['brooms']

снова, поместите это в понимание списка /цикл, если вы имеете дело с большим словарем.

0 голосов
/ 02 апреля 2019

Вы можете сделать это следующим образом (но это не приведет к предоставленным вами числам):

abc =   {"Sticks" :{"brooms":8061, "vaccums":2721},
     "Stones":{"brooms":8399, "vaccums":2873},
     "Bones":{"brooms":7706, "vaccums":2654}}

averages = { k: sum(v.values())/len(v) for k,v in abc.items() }

# {'Sticks': 5391.0, 'Stones': 5636.0, 'Bones': 5180.0}

vac2broom = { k: v["vaccums"]/v["brooms"] for k,v in abc.items() }

# {'Sticks': 0.33755117231112763, 'Stones': 0.3420645314918443, 'Bones': 0.3444069556189982}

или для конкретного предмета:

avg = sum(abc["Sticks"].values())/len(abc["Sticks"])

ratio = abc["Sticks"]["vaccums"] / abc["Sticks"]["brooms"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...