Я все еще довольно новичок в Python и пытаюсь автоматизировать то, что я делаю вручную. У меня есть отсортированный словарь, состоящий из 6 пунктов. Размер словаря всегда будет содержать 6 элементов, где ключ - это строка, а значение - это число с плавающей запятой.

После того, как я заполнил свой словарь, я хочу вычесть значения из словаря в парах, т.е. значение из 2-го элемента вычитает значение из первого элемента, значение из 4-го элемента вычитает значение из 3-го элемента и, наконец, значение из нашего последнего элемента в словаре вычитает значение из нашего 5-го пункта.

Когда закончите, я распечатаю результаты.

Пример моего словаря:

my_dict = {}
my_dict = {'item1': '18.6798', 'item2': '12.638', 'item3': '20', \
     'item4': '60.00', 'item5': '65.7668', 'item6': '45.7668'}

Я искал понимание словаря в python, для циклов с вложенными ifs (не идеально), но мне было трудно понять это. Любые указатели по-разному (более эффективные), которые позволили бы мне получить доступ к индексу значения в словаре?

    remainder = {}
        for key, value in sorted(my_dict.items()):
        ...
    print(remainder)

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

0
Kanox 23 Июн 2019 в 17:55

2 ответа

Лучший ответ

Хорошо, сначала я делю их на пары, а затем для каждой пары вычисляю новое значение и вставляю remainder:

my_dict = {'item1': 18.6798, 'item2': 12.638, 'item3': 20, \
     'item4': 60.00, 'item5': 65.7668, 'item6': 45.7668}

items = list(sorted(my_dict.keys()))
pairs = [items[i:i + 2] for i in range(0, len(items), 2)]

remainder = {}
for item1, item2 in pairs:
    remainder[item1] = my_dict[item1] - my_dict[item2]

print(remainder)


1
Adam.Er8 23 Июн 2019 в 15:07

Вы можете архивировать iter из dict.items(), а затем использовать их в простом понимании словаря. Если у вас есть нечетное количество ключей, это игнорирует последний, так как нечего вычитать:

my_dict = {'item1': '18.6798', 'item2': '12.638', 'item3': '20','item4': '60.00', 'item5': '65.7668', 'item6': '45.7668'}

f = iter(sorted(my_dict.items()))
{k1:float(v1) - float(v2) for ((k1, v1), (k2, v2)) in zip(f,f)}

< Сильный > Результат :

{'item1': 6.0418, 'item3': -40.0, 'item5': 20.0}
1
Mark Meyer 23 Июн 2019 в 15:33