0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 17

Составление словаря из n - ключей и m - значений

04.04.2020, 14:05. Показов 3770. Ответов 24

Студворк — интернет-сервис помощи студентам
Python 3.5, windows.

Подскажите, пожалуйста, алгоритм чтобы составить словарь из n-ключей и m- значений.

Входные данные:
a={‘x’:’1,2,3′, ’y’:’22,33’, … 'n':'m'}
n,m может быть любой длинны.

Надо чтобы получилось так:

b={[{‘x’:’1′,’y’:22’,…’n’:’m’}],[{‘x’:’1′,’y’:33′..’n’:’m’}],[{‘x’:’2′,’y’:22’…’n’:’m’}],[{‘x’:’2′,’y’:33’…’n’:’m’}],[{‘x’:’3′,’y’:22’…’n’:’m’}],[{‘x’:’3′,’y’:33’…’n’:’m’}]}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.04.2020, 14:05
Ответы с готовыми решениями:

Python - найти список значений ключей словаря вложенного в списки
Добрый день уважаемые форумчане. Вопрос такой: Есть список - d, и список ключей l: d = , , , ] l =

Превратить первый список в набор ключей словаря, а второй список добавить к каждому ключу словаря в виде списка
Даны два списка с одинаковым количеством элементов. Создать новый словарь. Превратить первый список в набор ключей словаря, а второй список...

Сортировка ключей словаря
Здравствуйте:) Существует словарь следующего вида: {'35': 1, '45': 2, '56': 3, '76': 4, '24': 5} Нужно отсортировать ключи данного...

24
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
04.04.2020, 17:01
Студворк — интернет-сервис помощи студентам
pasapasa,
Это не будет работать в других версиях Python (ниже 3.6) потому что там порядок ключей в словарях не соблюдается.
А твой код завязан на соблюдении порядка ключей.
0
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 17
04.04.2020, 18:35  [ТС]
Garry Galler,
Ок, учту.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
05.04.2020, 00:38
pasapasa, Для трех ключей в исходном словаре у Вас все нормально работает. Думал, что для количества ключей больше трех работать не будет. Однако и для четырех ключей Ваш код сработал, вот только вывел словари в списке как то в разброс, хотя и все в полном объеме. Можно предположить, что и для большого количества ключей будет выводить все необходимые словари, хоть и в разброс.
Python
1
2
3
4
5
6
import itertools
from pprint import pprint
 
a = {'x': '1,2,3', 'y': '22,33', 'z': 'a,b,c', 'q': '55,66,77,88'}
b = [dict(zip(a, yy)) for yy in itertools.product(*(xx.split(',') for xx in a.values()))]
pprint(b)
Выводит:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
[{'q': '55', 'x': '1', 'y': '22', 'z': 'a'},
 {'q': '66', 'x': '1', 'y': '22', 'z': 'a'},
 {'q': '77', 'x': '1', 'y': '22', 'z': 'a'},
 {'q': '88', 'x': '1', 'y': '22', 'z': 'a'},
 {'q': '55', 'x': '1', 'y': '22', 'z': 'b'},
 {'q': '66', 'x': '1', 'y': '22', 'z': 'b'},
 {'q': '77', 'x': '1', 'y': '22', 'z': 'b'},
 {'q': '88', 'x': '1', 'y': '22', 'z': 'b'},
 {'q': '55', 'x': '1', 'y': '22', 'z': 'c'},
 {'q': '66', 'x': '1', 'y': '22', 'z': 'c'},
 {'q': '77', 'x': '1', 'y': '22', 'z': 'c'},
 {'q': '88', 'x': '1', 'y': '22', 'z': 'c'},
 {'q': '55', 'x': '1', 'y': '33', 'z': 'a'},
 {'q': '66', 'x': '1', 'y': '33', 'z': 'a'},
 {'q': '77', 'x': '1', 'y': '33', 'z': 'a'},
 {'q': '88', 'x': '1', 'y': '33', 'z': 'a'},
 {'q': '55', 'x': '1', 'y': '33', 'z': 'b'},
 {'q': '66', 'x': '1', 'y': '33', 'z': 'b'},
 {'q': '77', 'x': '1', 'y': '33', 'z': 'b'},
 {'q': '88', 'x': '1', 'y': '33', 'z': 'b'},
 {'q': '55', 'x': '1', 'y': '33', 'z': 'c'},
 {'q': '66', 'x': '1', 'y': '33', 'z': 'c'},
 {'q': '77', 'x': '1', 'y': '33', 'z': 'c'},
 {'q': '88', 'x': '1', 'y': '33', 'z': 'c'},
 {'q': '55', 'x': '2', 'y': '22', 'z': 'a'},
 {'q': '66', 'x': '2', 'y': '22', 'z': 'a'},
 {'q': '77', 'x': '2', 'y': '22', 'z': 'a'},
 {'q': '88', 'x': '2', 'y': '22', 'z': 'a'},
 {'q': '55', 'x': '2', 'y': '22', 'z': 'b'},
 {'q': '66', 'x': '2', 'y': '22', 'z': 'b'},
 {'q': '77', 'x': '2', 'y': '22', 'z': 'b'},
 {'q': '88', 'x': '2', 'y': '22', 'z': 'b'},
 {'q': '55', 'x': '2', 'y': '22', 'z': 'c'},
 {'q': '66', 'x': '2', 'y': '22', 'z': 'c'},
 {'q': '77', 'x': '2', 'y': '22', 'z': 'c'},
 {'q': '88', 'x': '2', 'y': '22', 'z': 'c'},
 {'q': '55', 'x': '2', 'y': '33', 'z': 'a'},
 {'q': '66', 'x': '2', 'y': '33', 'z': 'a'},
 {'q': '77', 'x': '2', 'y': '33', 'z': 'a'},
 {'q': '88', 'x': '2', 'y': '33', 'z': 'a'},
 {'q': '55', 'x': '2', 'y': '33', 'z': 'b'},
 {'q': '66', 'x': '2', 'y': '33', 'z': 'b'},
 {'q': '77', 'x': '2', 'y': '33', 'z': 'b'},
 {'q': '88', 'x': '2', 'y': '33', 'z': 'b'},
 {'q': '55', 'x': '2', 'y': '33', 'z': 'c'},
 {'q': '66', 'x': '2', 'y': '33', 'z': 'c'},
 {'q': '77', 'x': '2', 'y': '33', 'z': 'c'},
 {'q': '88', 'x': '2', 'y': '33', 'z': 'c'},
 {'q': '55', 'x': '3', 'y': '22', 'z': 'a'},
 {'q': '66', 'x': '3', 'y': '22', 'z': 'a'},
 {'q': '77', 'x': '3', 'y': '22', 'z': 'a'},
 {'q': '88', 'x': '3', 'y': '22', 'z': 'a'},
 {'q': '55', 'x': '3', 'y': '22', 'z': 'b'},
 {'q': '66', 'x': '3', 'y': '22', 'z': 'b'},
 {'q': '77', 'x': '3', 'y': '22', 'z': 'b'},
 {'q': '88', 'x': '3', 'y': '22', 'z': 'b'},
 {'q': '55', 'x': '3', 'y': '22', 'z': 'c'},
 {'q': '66', 'x': '3', 'y': '22', 'z': 'c'},
 {'q': '77', 'x': '3', 'y': '22', 'z': 'c'},
 {'q': '88', 'x': '3', 'y': '22', 'z': 'c'},
 {'q': '55', 'x': '3', 'y': '33', 'z': 'a'},
 {'q': '66', 'x': '3', 'y': '33', 'z': 'a'},
 {'q': '77', 'x': '3', 'y': '33', 'z': 'a'},
 {'q': '88', 'x': '3', 'y': '33', 'z': 'a'},
 {'q': '55', 'x': '3', 'y': '33', 'z': 'b'},
 {'q': '66', 'x': '3', 'y': '33', 'z': 'b'},
 {'q': '77', 'x': '3', 'y': '33', 'z': 'b'},
 {'q': '88', 'x': '3', 'y': '33', 'z': 'b'},
 {'q': '55', 'x': '3', 'y': '33', 'z': 'c'},
 {'q': '66', 'x': '3', 'y': '33', 'z': 'c'},
 {'q': '77', 'x': '3', 'y': '33', 'z': 'c'},
 {'q': '88', 'x': '3', 'y': '33', 'z': 'c'}]

Почему то последний ключ выводит первым.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
05.04.2020, 01:21
Цитата Сообщение от Viktorrus Посмотреть сообщение
Можно предположить, что и для большого количества ключей будет выводить все необходимые словари, хоть и в разброс
Если порядок извлечения a.values() будет всегда совпадать с порядком извлечения a.keys() (ключи у ТС в функции zip извлекаются), ну тогда даже в Python 3.5 и ниже, где словарь неупорядочен все-таки такой код будет работать. Но лично я даже на такой порядок все равно бы не надеялся. В конце концов, есть надежный в плане упорядоченности OrderedDict, который существует с версии 2.7 и который гарантирует абсолютный порядок извлечения ключей. Либо, можно вообще обойтись обычным списком кортежей.

Добавлено через 21 минуту
P.S. Впрочем, все-таки код будет работать, потому что порядок keys() идентичен порядку values():
Python
1
2
3
4
>>> a = {str(i):str(i) for i in [random.randint(0,1000) for _ in range(100000)]}
>>> list(a.keys()) == list(a.values())
True
>>>
Но внутри словаря, естественно, порядка начальной вставки ключей не будет, если ваша версия Python ниже 3.6.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
05.04.2020, 01:49
Цитата Сообщение от Garry Galler Посмотреть сообщение
Но внутри словаря, естественно, порядка начальной вставки ключей не будет
Про это честно говоря я как то и забыл. Спасибо что напомнили.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2020, 01:49
Помогаю со студенческими работами здесь

Восстановление значения ключей словаря
Восстановить значение ключей словаря, если значение переменной s1 равно апельсин, а значение переменной s2 равно спаниель. dct = {...:...

Составление словаря биграмм
Нужно составить словарь, который для каждого слова W хранит вторую часть V, наиболее частотной биграммы (W, V), начинающейся с W. Ключи...

Составление английского словаря
Привет всем. У меня такая проблема, я пишу прогу, англо-русский словарь. Работает прога так: Пользователь вводит в edit английское слово, а...

Задача на составление словаря
Здравствуйте, пытаюсь решить задачу: Пользователь вводит число k — количество автомобилей. Затем он вводит k автомобилей в формате:...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

Новые блоги и статьи
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru