#python #dictionary
Вопрос:
У меня есть словарь, который мне нужно разделить на более мелкие словари в зависимости от имени ключа, используя значения из массива:
dict = {'1_100': 50, '1_102': 100, '2_100': 150, '2_102': 200, '3_100': 50, '3_102': 100, ...} narray = [1, 2, 3, 4, 5, ...]
Я пытаюсь разделить словарь в зависимости от первого номера ключа
До сих пор я делал следующее:
for k, v in dict.items(): for t in narray: if str(t) "_" in str(dict.keys()):
Я не уверен, как выполнить фактическую часть разделения и обеспечить создание нового словаря, когда он столкнется с новым номером в ключе «X_». Обратите внимание, что у каждого ключа разное количество ключей, поэтому разделение каждого n-го числа не сработает
Я хочу в идеале закончить с
dict1 = {'1_100': 50, '1_102': 100, ...} dict2 = {'2_100': 50, '2_102': 100, ...} dict3 = {'3_100': 50, '3_102': 100, ...} dictN = {'N_100': 50, 'N_102': 100, ...}
Любая помощь будет очень признательна
Комментарии:
1. Являются ли числа во
narray
всех последовательных положительных целых числах?2. @Reti43 да, это последовательные положительные целые числа
Ответ №1:
Попробуйте это:
dcts = {str(n): {} for n in narray} for k, v in dct.items(): dcts[k.split('_')[0]][k] = v dcts = list(dcts.values())
dct
это ваш начальный словарь, dcts
это список словарей (возможно, вы захотите удалить пустые).
Ответ №2:
data = {'1_100': 50, '1_102': 100, '2_100': 150, '2_102': 200, '3_100': 50, '3_102': 100} for k,v in data.items(): name = "dict" k.split("_")[0] d = globals().get(name, {}) d.update({k:v}) globals()[name] = d print(dict1) print(dict2) print(dict3)
Результат:
{‘1_100’: 50, ‘1_102’: 100}
{‘2_100’: 150, ‘2_102’: 200}
{‘3_100’: 50, ‘3_102’: 100}
Комментарии:
1. Добавление подобных имен в область видимости-плохая идея, потому что вам придется извлекать их с помощью аналогичного взлома, когда они вам понадобятся. Гораздо лучше либо создать список диктантов, либо диктанты диктантов.
2. Да, я знаю, я просто написал код таким образом, чтобы он был похож на его пример
3. ПРИВЕТ, спасибо тебе за это. Я должен пойти немного почитать о глобальной функции, так как я не использовал ее раньше
4. @Momo Я рекомендую не использовать их, а создать переменную results, которая имеет в качестве ключа имя и значение d. повторные результаты[имя] = d ; печать(результаты[«дикт1»])