Сопоставление четырех строковых значений всем различным возможностям двух диапазонов чисел во вложенном словаре в python

У меня есть следующие списки. На самом деле эти списки намного больше, но я упростил для примера.

d = ["a", "b", "c", "d"]
p = [1,2,3,4]
a = [1,2,3,4]

Мне нужно сопоставить буквы в d со всеми возможными вариантами p*a в следующем формате:

{0: {'a': {p:1, a:1}
         'b': {p:1, a:1}
         'c': {p:1, a:1}
         'd': {p:1, a:1}
         }}

Это также может быть список вместо словаря, где индекс — это возможность, а где n списка — все возможные комбинации букв и словарей p и a.

Код, который я написал, выглядит так

p = [1,2,3,4]
a = [1,2,3,4]
d = ["a", "b", "c", "d"]

o = list()
end_dict = list()
for y in p:
    for z in a:
        o.append({"p":y, "a":z})

counter = 0
for x in d:
    for y in o:
        print(counter)
        end_dict.append({x:y})
        counter+=1
print(end_dict)

Однако это не создает список, в котором все буквы в словаре вместе. Я понятия не имею, как сделать это эффективно.

Я считаю, что это код, который должен работать:

    p = [1,2,3,4]
    a = [1,2,3,4]
    d = ["a", "b", "c", "d"]

    o = list()
    end_dict = list()
    for price in p:
        for amount in a:
            o.append({"p": price, "a": amount})

    for w in o:
        for x in o:
            for y in o:
                for z in o:
                    test = {
                        d[0]:w,
                        d[1]:x,
                        d[2]:y,
                        d[3]:z
                    }
                    end_dict.append(test)
    print(end_dict)

Я не понимаю ожидаемого результата для «всех разных возможностей p*a». Почему {p: 1, a: 1} для всех четырех букв?

trincot 13.04.2023 19:45

Класс product из itertools можно использовать для создания декартова произведения p, a и d, например. for x in product(p, a, d): print x

user3386109 13.04.2023 20:05

Я не вижу никаких "разных" комбинаций. Они все выглядят как {p: 1, a: 1}. Может быть, это я, но я не понимаю, чего вы хотите добиться. Более того, если "a", "b", "c", "d" должно представлять 4 различных способа составления пар из списков a и p, что делать с тем фактом, что возможно еще 12 пар (всего 16)?

trincot 13.04.2023 20:07

Извините, я неправильно понял. следующим может быть {1: {'a': {p:2, a:1} 'b': {p:1, a:1} 'c': {p:1, a:1} 'd ': {p:1, a:1} }} И следующий {1: {'a': {p:1, a:2} 'b': {p:1, a:1} 'c': {p:1, a:1} 'd': {p:1, a:1} }} и так далее

willem12 13.04.2023 20:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это в понимании списка, которое создает словарную запись со всеми ключами для каждой комбинации значений p и a:

d = ["a", "b", "c", "d"]
p = [1,2,3,4]
a = [1,2,3,4]

r = [ {dk:{"p":pv,"a":av} for dk in d} for pv in p for av in a ]

print(*r,sep = "\n")
{'a': {'p': 1, 'a': 1}, 'b': {'p': 1, 'a': 1}, 'c': {'p': 1, 'a': 1}, 'd': {'p': 1, 'a': 1}}
{'a': {'p': 1, 'a': 2}, 'b': {'p': 1, 'a': 2}, 'c': {'p': 1, 'a': 2}, 'd': {'p': 1, 'a': 2}}
{'a': {'p': 1, 'a': 3}, 'b': {'p': 1, 'a': 3}, 'c': {'p': 1, 'a': 3}, 'd': {'p': 1, 'a': 3}}
{'a': {'p': 1, 'a': 4}, 'b': {'p': 1, 'a': 4}, 'c': {'p': 1, 'a': 4}, 'd': {'p': 1, 'a': 4}}
{'a': {'p': 2, 'a': 1}, 'b': {'p': 2, 'a': 1}, 'c': {'p': 2, 'a': 1}, 'd': {'p': 2, 'a': 1}}
{'a': {'p': 2, 'a': 2}, 'b': {'p': 2, 'a': 2}, 'c': {'p': 2, 'a': 2}, 'd': {'p': 2, 'a': 2}}
{'a': {'p': 2, 'a': 3}, 'b': {'p': 2, 'a': 3}, 'c': {'p': 2, 'a': 3}, 'd': {'p': 2, 'a': 3}}
{'a': {'p': 2, 'a': 4}, 'b': {'p': 2, 'a': 4}, 'c': {'p': 2, 'a': 4}, 'd': {'p': 2, 'a': 4}}
{'a': {'p': 3, 'a': 1}, 'b': {'p': 3, 'a': 1}, 'c': {'p': 3, 'a': 1}, 'd': {'p': 3, 'a': 1}}
{'a': {'p': 3, 'a': 2}, 'b': {'p': 3, 'a': 2}, 'c': {'p': 3, 'a': 2}, 'd': {'p': 3, 'a': 2}}
{'a': {'p': 3, 'a': 3}, 'b': {'p': 3, 'a': 3}, 'c': {'p': 3, 'a': 3}, 'd': {'p': 3, 'a': 3}}
{'a': {'p': 3, 'a': 4}, 'b': {'p': 3, 'a': 4}, 'c': {'p': 3, 'a': 4}, 'd': {'p': 3, 'a': 4}}
{'a': {'p': 4, 'a': 1}, 'b': {'p': 4, 'a': 1}, 'c': {'p': 4, 'a': 1}, 'd': {'p': 4, 'a': 1}}
{'a': {'p': 4, 'a': 2}, 'b': {'p': 4, 'a': 2}, 'c': {'p': 4, 'a': 2}, 'd': {'p': 4, 'a': 2}}
{'a': {'p': 4, 'a': 3}, 'b': {'p': 4, 'a': 3}, 'c': {'p': 4, 'a': 3}, 'd': {'p': 4, 'a': 3}}
{'a': {'p': 4, 'a': 4}, 'b': {'p': 4, 'a': 4}, 'c': {'p': 4, 'a': 4}, 'd': {'p': 4, 'a': 4}}

Спасатель! Спасибо это красиво

willem12 13.04.2023 20:25

Другие вопросы по теме