Коллекция python кортежей в словарь

У меня есть следующая структура данных в Python 3:

foo = [(1, 'ADTABC', 7), (3, 'ACHDAT', 8), (1, 'AQNDXB', 15), (2, 'AFTCBA', 14)]

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

{'1ADTABC': 7, '3ACHDAT': 8, '1AQNDXB': 15, '2AFTCBA': 14}

Как мне это достичь?

Зачем? Коллекция, которую вы видите, является результатом запроса SqlAlchemy. Третье поле - это уникальный идентификатор в базе данных. Мне нужно быстро и эффективно получить Id, учитывая два других элемента. Поскольку эти значения действительно не обновляются, нет необходимости делать обратные вызовы для db для извлечения.

2 ответа

Вы можете сделать это без строки concat, например:

Код:

foo_dict = {x[0:2]: x[2] for x in foo}

String concat - это не лучший способ сделать это, поскольку для этого требуется создание еще одного объекта, но действительно ли он создает дополнительную информацию. Кортеж будет использовать исходные объекты, но все же будет нуждаться в ключах dict.

Тестовый код:

foo = [(1, 'ADTABC', 7), (3, 'ACHDAT', 8), (1, 'AQNDXB', 15), (2, 'AFTCBA', 14)]
foo_dict = {x[0:2]: x[2] for x in foo}

print(foo)
print(foo_dict)

Результаты:

[(1, 'ADTABC', 7), (3, 'ACHDAT', 8), (1, 'AQNDXB', 15), (2, 'AFTCBA', 14)]

{(1, 'ADTABC'): 7, (3, 'ACHDAT'): 8, (1, 'AQNDXB'): 15, (2, 'AFTCBA'): 14}


h = {str(a) + b: c for a,b,c in foo}

licensed under cc by-sa 3.0 with attribution.