#python #python-3.x
#python #python-3.x
Вопрос:
При попытке запустить следующий код:
temp3 = {
('EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-USD','EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-GBP'):'EURIBOR_EUR_1Y'
}
print (temp3.get('EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-USD'))
Вывод:
None
Ожидаемый:
EURIBOR_EUR_1Y
Комментарии:
1. EURIBOR_EUR_1Y — это не ключ, а значение для первого кортежа, который действует как ваш словарь, прочитайте это следующим образом: (‘EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-USD’,’EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-GBP’): ‘EURIBOR_EUR_1Y’
2. Что это? ключ кортежа со значением str?
3. Я предположил, что в скобках он принимает значение «ИЛИ», а не «И».
Ответ №1:
Вы ожидаете, что get
функция распакует key
значения и выполнит поиск внутри кортежей; это так не работает.
Правильный способ — использовать тот, key
который вы использовали для создания dict
.
Пример:
temp3 = {
('EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-USD',
'EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-GBP'):'EURIBOR_EUR_1Y'
}
print(temp3.get(('EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-USD',
'EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-GBP')))
Который выведет ключ; чтобы получить все значения, которые имеют соответствующий ключ, вы можете использовать следующее:
def key_search(needle, haystack):
matches = []
for key, value in haystack.items():
if type(key) in [list, tuple, dict] and needle in key:
matches.append(value)
elif needle == key:
matches.append(value)
return matches
data = {
(1, 2, 3): 'heyyy',
(2, 1): 'heyyy there'
}
print(key_search(1, data))
Вывод
['heyyy there', 'heyyy']
Где needle
— это ключ, который вы ищете, а стог сена — это ваши данные.
Комментарии:
1. Я предположил, что в скобках он принимает значение «ИЛИ», а не «И». Что я хотел сделать, так это то, что если указан любой из ключей в скобке, он возвращает одно значение, как указано.
2. Я обновил вопрос решением. Вы можете либо использовать это, либо использовать
yield
который является генератором.3. Если вам нужно только одно совпадение, вы можете удалить
matches = []
и заменитьmatches.append(value)
наreturn value
4. Я также думал в том же направлении, но поскольку я должен передать этот код кому-то другому. Я думаю, проще всего было бы разделить каждую пару. Большое вам спасибо, очень ценю это.
Ответ №2:
На самом деле правильный ключ ('EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-USD','EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-GBP')
Итак, если вы попытаетесь:
print(temp3.get(('EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-USD','EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-GBP')))
Вы получите:
EURIBOR_EUR_1Y
Комментарии:
1. Я предположил, что в скобках он принимает значение «ИЛИ», а не «И». Что я хотел сделать, так это то, что если указан любой из ключей в скобке, он возвращает одно значение, как указано.
Ответ №3:
Вы не используете полный ключ для словаря.
Попробуйте использовать полный ключ
(temp3.get('EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-USD','EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-GBP'))
'EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-GBP'
Комментарии:
1. Я предположил, что в скобках он принимает значение «ИЛИ», а не «И». Что я хотел сделать, так это то, что если указан любой из ключей в скобке, он возвращает одно значение, как указано.
Ответ №4:
Это то, что вы ищете
print(temp3.get([i for i in temp3 if 'EUR-EURIBOR-1Y-SWAPTION-PHYSICAL-ANNUAL-BOND-QUANTO-USD' in i][0]))
Вывод:
EURIBOR_EUR_1Y