Добавить элементы к нескольким ключам словаря Python

1

Я пытаюсь добавить элементы в несколько ключей словаря в цикле. Тем не менее, сейчас я вижу только длинный способ сделать это - отдельная строка для каждого обновления ключа, например:

# My dictionary
my_dict = {'Key1': [0], 'Key2': [0], 'Key3': [0]}

# Show initial state
print(my_dict)

# Populate dictionary with new elements
for i in range(1, 5):
    my_dict['Key1'].append(i)
    my_dict['Key2'].append(-i)
    my_dict['Key3'].append(i^2)

# Show final result
print(my_dict)

который дает желаемый

{'Key1': [0, 1, 2, 3, 4], 'Key2': [0, -1, -2, -3, -4], 'Key3': [0, 3, 0, 1, 6]}

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

for i in range(1, 5):
    my_dict['Key1', 'Key2', 'Key3'].append(i, -i, i^2)
  • 1
    Что это собирается улучшить?
  • 0
    @KlausD. Предположим, у меня есть не три ключа, а сто. Я не хотел бы писать сто строк, чтобы дать новые элементы ключам. Я хотел бы кормить его только массивом или списком в одну строку.
Показать ещё 6 комментариев
Теги:
loops
dictionary
append

2 ответа

0
Лучший ответ

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

Обратите внимание, что вам придется поддерживать постоянно расширяющийся список операций для ключей по мере их обновления.

# My dictionary
my_dict = {'key1': [0], 'key2': [0], 'key3': [0]}

# Show initial state
print(my_dict)

# Populate dictionary with new elements
for i in range(1, 5):
    key_update_operation = {'key1': i, 'key2': -i, 'key3': i^2}
    for k, v in my_dict.items():
        my_dict[k].append(key_update_operation[k])

# Show final result
print(my_dict)

Я думаю, это в основном то, что предлагает Аран-Фей. Имейте в виду, в то время как этот пример работает очень хорошо, читаемость - это огромная вещь, если вы собираетесь поделиться своим кодом с другими людьми, так что не бойтесь просто держать его просто, не так много, чтобы его можно было получить!

0

Вы можете создать подкласс dict и переопределить __getitem__ вернуть объект пользовательского класса, когда аргумент кортеж просто так, что пользовательский класс может иметь на append метод, добавляемые соответствующие значения для заданных ключей в одном кадре:

class Dict(dict):
    class DictView:
        def __init__(self, d, keys):
            self.d = d
            self.keys = keys

        def append(self, *items):
            for key, item in zip(self.keys, items):
                self.d[key].append(item)

    def __getitem__(self, key):
        if isinstance(key, tuple):
            return self.DictView(self, key)
        return super().__getitem__(key)

чтобы:

my_dict = Dict({'Key1': [0], 'Key2': [0], 'Key3': [0]})
for i in range(1, 5):
    my_dict['Key1', 'Key2', 'Key3'].append(i, -i, i^2)
print(my_dict)

выведет:

{'Key1': [0, 1, 2, 3, 4], 'Key2': [0, -1, -2, -3, -4], 'Key3': [0, 3, 0, 1, 6]}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню