#python #dictionary #tuples
#python #словарь #кортежи
Вопрос:
У меня есть словарь, созданный с позициями баскетболистов, где ключом является имя игрока, а значением является кортеж с их позицией (позициями). Например: {‘Player1’: (‘SF’, ‘PF’), ‘Player2’: ‘C’, ‘Player3’: ‘SG’}
Я пытаюсь объединить позиции каждого игрока с другой строкой, но когда я пытаюсь выбрать второе значение, вместо этого оно сокращает первое значение.
Есть ли способ перебирать ключи и каждое отдельное значение для каждого игрока или мне нужно создать вложенный цикл для условий, когда кортеж имеет несколько значений?
for k,v in player_position_dict.items():
print(v[1])
создает ошибку, потому что, очевидно, некоторые позиции не будут иметь этого индекса, поэтому мне интересно, есть ли другой цикл, который я могу использовать, чтобы проверить, имеет ли значение несколько элементов? Я пытался использовать len(), но это либо возвращает длину строки, если она занимает одну позицию, либо длину кортежа, так что это недостаточно различается.
Комментарии:
1. У вас есть ожидаемый результат?
2. Вы пишете «… и значение, являющееся кортежем с их позицией (позициями)», но затем вы показываете dict, где некоторые значения являются кортежами, а другие — строками. Что это?
Ответ №1:
Возможно, вы могли бы использовать isinstance()
перед проверкой с len()
:
player_position_dict = {
'Player1': ('SF', 'PF'),
'Player2': 'C',
'Player3': 'SG',
'Player4': ('PG'),
}
some_string_to_concentate_with = 'some_string_to_concentate_with'
for player, position in player_position_dict.items():
if isinstance(position, tuple):
if len(position) > 1:
print(f'{player} has multiple positions:')
for pos in position:
print(f'{some_string_to_concentate_with}_{pos}')
elif len(position) == 1:
print(f'{player} has one position:')
print(f'{some_string_to_concentate_with}_{position[0]}')
else:
print(f'{player} has one position:')
print(f'{some_string_to_concentate_with}_{position}')
Вывод:
Player1 has multiple positions:
some_string_to_concentate_with_SF
some_string_to_concentate_with_PF
Player2 has one position:
some_string_to_concentate_with_C
Player3 has one position:
some_string_to_concentate_with_SG
Player4 has one position:
some_string_to_concentate_with_PG
Комментарии:
1. Просто любопытно — есть ли причина, по которой вы использовали жирный текст вместо
code format
для isinstance() и len() ?2. Люди (т. Е. OP) с большей вероятностью будут нажимать на ссылки, когда они выделены жирным шрифтом. Обычно я использую что-то вроде [<code>str.<b>upper()</b><code>](http …), Где только часть текста выделяется жирным шрифтом, когда это уместно. Но на этот раз я просто забыл добавить форматирование кода.