Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/16: Рейтинг темы: голосов - 16, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 17

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

04.04.2020, 14:05. Показов 3721. Ответов 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 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru