#python #dictionary
#python #словарь
Вопрос:
Хорошо, мне нужно создать программу, которая принимает упорядоченные пары, разделенные пробелом, и добавляет их в словарь.
То есть
points2dict(["3 5"])
{"3":"5"}
Как мне заставить python распознавать, что первое число является ключом, а второе число — значением???
Комментарии:
1. Пожалуйста, предоставьте хотя бы правильный псевдокод. О чем это
(["3:5"])
? Вы всегда можете разделить строку на две части…2. Под «программой» вы подразумеваете «функцию»? Также вашему синтаксису списка / словаря может потребоваться некоторая работа…
3. Вам нужен словарь со строковыми ключами и значениями или целочисленными ключами и значениями? Вы говорите число, поэтому я предполагаю целое число.
Ответ №1:
Использование split
:
In [3]: pairs = ['3 5', '10 2', '11 3']
In [4]: dict(p.split(' ', 1) for p in pairs)
Out[4]: {'10': '2', '11': '3', '3': '5'}
Ответ №2:
values = [
'3 5',
'6 10',
'20 30',
'1 2'
]
print dict(x.split() for x in values)
# Prints: {'1': '2', '3': '5', '20': '30', '6': '10'}
Ответ №3:
Для вашего простого примера, в котором есть только пары чисел, всегда разделенных пробелом, проверка не требуется:
def points_to_dict(points):
#create a generator that will split each string of points
string_pairs = (item.split() for item in points)
#convert these to integers
integer_pairs = ((int(key), int(value)) for key, value in string_pairs)
#consume the generator expressions by creating a dictionary out of them
result = dict(integer_pairs)
return result
values = ("3 5", ) #tuple with values
print points_to_dict(values) #prints {3: 5}
Важно отметить, что это даст вам целочисленные ключи и значения (я предполагаю, что это то, что вы хотите, и в любом случае это более интересное преобразование для иллюстрации). Это также будет работать лучше, чем циклы python и даже встроенная карта (отложенное выполнение позволяет генераторам складывать вместо выделения памяти для промежуточных результатов).