Как выбрать значение из словаря Python с несколькими элементами

Я пытаюсь получить значения из словаря Python. Как вы можете видеть ниже, у меня есть этот пример. Я хотел бы получить только ключи, начинающиеся с "BTC_", и выбрать его, если его значение "BTC" больше 100.

d = { 
  'BTC_LTC':  { 'BTC': '138.13504038', 'LTC': '4662.34229096' }, 
  'BTC_MAID': { 'BTC': '10.38010322', 'MAID': '359919.71515255' },
  'BTC_NEM': { 'BTC': '30.34435435', 'NEM': '34435345' },
  'BTC_TRX': { 'BTC': '101.1122', 'TRX': '4546456456.343543543' },
  'USDC_BTC': { 'USDC': '481389.13175764', 'BTC': '74.73988488' },
  'USDC_ETH': { 'USDC': '72302.27016210', 'ETH': '357.72884034' },
  'totalBTC': '2340.96441558',
  'totalETH': '2771.63218462',
  'totalUSDC': '681255.56961992',
  'totalXMR': '267.83601213' 
}

Ожидаемым результатом является следующий список:

['BTC_LTC', 'BTC_TRX'] 

Из-за того, что их ключ начинается с "BTC_", а их значение 'BTC' больше 100.

ключи строки?

lmiguelvargasf 01.06.2019 02:25

Добро пожаловать в stackoverflow! Важно, чтобы вы прочитали FAQ, чтобы знать, как опубликовать хороший вопрос. В этом случае вы еще не ответили: что вы пробовали до сих пор?

Dave Liu 01.06.2019 02:30

@lmiguelvargasf да строки

Garoul 01.06.2019 04: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
3
2 591
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

dic = { 
  BTC_LTC:  { BTC: '138.13504038', LTC: '4662.34229096' }, 
  BTC_MAID: { BTC: '10.38010322', MAID: '359919.71515255' },
  BTC_NEM: { BTC: '30.34435435', NEM: '34435345' },
  BTC_TRX: { BTC: '101.1122', TRX: '4546456456.343543543' },
  USDC_BTC: { USDC: '481389.13175764', BTC: '74.73988488' },
  USDC_ETH: { USDC: '72302.27016210', ETH: '357.72884034' },
  totalBTC: '2340.96441558',
  totalETH: '2771.63218462',
  totalUSDC: '681255.56961992',
  totalXMR: '267.83601213' 
}   

res = []
for i in dic:
    if isinstance(i,dict):
        if i['BTC']>100:
            res.append(i)

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

вы можете попробовать это:

предполагая назначение переменной для данного словаря

a = { 
  'BTC_LTC':  { 'BTC': '138.13504038', 'LTC': '4662.34229096' }, 
  'BTC_MAID': { 'BTC': '10.38010322', 'MAID': '359919.71515255' },
  'BTC_NEM': { 'BTC': '30.34435435', 'NEM': '34435345' },
  'BTC_TRX': { 'BTC': '101.1122', 'TRX': '4546456456.343543543' },
  'USDC_BTC': { 'USDC': '481389.13175764', 'BTC': '74.73988488' },
  'USDC_ETH': { 'USDC': '72302.27016210', 'ETH': '357.72884034' },
  'totalBTC': '2340.96441558',
  'totalETH': '2771.63218462',
  'totalUSDC': '681255.56961992',
  'totalXMR': '267.83601213' 
}   
result = []
for k, v in a.items():
   if k.startswith('BTC') and float(v.get('BTC', 0)) > 100:
       result.append(k)
print(result)

в Python ключи в словаре должны быть неизменяемыми, поэтому ваш словарь недействителен, вы должны преобразовать ключи в строку или неизменяемый объект для использования

https://docs.python.org/2.7/tutorial/datastructures.html#dictionaries

Предполагая, что ваши ключи являются строками, вы можете использовать следующее назначение словаря переменной с именем d:

d = { 
  'BTC_LTC':  { 'BTC': '138.13504038', 'LTC': '4662.34229096' }, 
  'BTC_MAID': { 'BTC': '10.38010322', 'MAID': '359919.71515255' },
  'BTC_NEM': { 'BTC': '30.34435435', 'NEM': '34435345' },
  'BTC_TRX': { 'BTC': '101.1122', 'TRX': '4546456456.343543543' },
  'USDC_BTC': { 'USDC': '481389.13175764', 'BTC': '74.73988488' },
  'USDC_ETH': { 'USDC': '72302.27016210', 'ETH': '357.72884034' },
  'totalBTC': '2340.96441558',
  'totalETH': '2771.63218462',
  'totalUSDC': '681255.56961992',
  'totalXMR': '267.83601213' 
}   

>>> [k for k, v in d.items() if k.startswith('BTC_') and v.get('BTC', None) is not None and float(v.get('BTC')) > 100]

['BTC_LTC', 'BTC_TRX']

Ключи как строки, используя понимание списка:

inp = {
    'BTC_LTC':  { 'BTC': '138.13504038', 'LTC': '4662.34229096' },
    'BTC_MAID': { 'BTC': '10.38010322', 'MAID': '359919.71515255' },
    'BTC_NEM': { 'BTC': '30.34435435', 'NEM': '34435345' },
    'BTC_TRX': { 'BTC': '101.1122', 'TRX': '4546456456.343543543' },
    'USDC_BTC': { 'USDC': '481389.13175764', 'BTC': '74.73988488' },
    'USDC_ETH': { 'USDC': '72302.27016210', 'ETH': '357.72884034' },
    'totalBTC': '2340.96441558',
    'totalETH': '2771.63218462',
    'totalUSDC': '681255.56961992',
    'totalXMR': '267.83601213'
}

outp = [k for k, v in inp.items() if k[:4] == "BTC_" and float(v["BTC"]) > 100]

print(outp)

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