Извлечение элементов из ключей с использованием условий из нескольких словарей в списке - PullRequest
1 голос
/ 28 сентября 2019

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

Например, для списка словарей, d:

d = [{a:'2.1', z:'apple', aa:'banana'}, {a:'3.6', z:'cherry', aa:'peach'}, {a:'4.7', z:'apple', aa:'banana'}, {a:'1.6', z:'apple', aa:'orange'}]

Я заинтересован в получении элемента против 'a' для словаря last в списке, где 'z':'apple' и 'aa':'banana' - удовлетворенные условия, т.е. получить элемент по ключу 'a' из d [-2] в вышеприведенном примере.

Есть ли какой-нибудь простой код для этого?

Я пытался:

  1. Python: получить диктат из списка на основечто-то внутри dict - но не уверен, как расширить это, чтобы быть условным для элементов против нескольких ключей внутри словарей.

  2. Нарезка словаря -но не уверен, как добавить условный аспект с использованием синтаксиса Python.

Я предполагаю, что решение включает в себя некоторое понимание словаря, но я относительно новичок в Python.

Anyпомощь оценена.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Вы можете использовать понимание списка , чтобы отфильтровать список словарей по условию и взять последний словарь из удовлетворенных случаев:

dicts = [{'a':'2.1', 'z':'apple', 'aa':'banana'}, {'a':'3.6', 'z':'cherry', 'aa':'peach'}, 
         {'a':'4.7', 'z':'apple', 'aa':'banana'}, {'a':'1.6', 'z':'apple', 'aa':'orange'}]

filtered_list = [elem for elem in dicts if elem.get('z') == 'apple' and elem.get('aa') == 'banana']
if filtered_list:
    result = filtered_list[-1]
else:
    result = None
    print("There's no satisfied dictionary.")
print(result)
# {'a': '4.7', 'z': 'apple', 'aa': 'banana'}
print(result['a'])
# 4.7
0 голосов
/ 28 сентября 2019

Итерируйте перевернутый список и прерывайте его, как только вы найдете диктат, удовлетворяющий условиям:

dicts = [{'a':'2.1', 'z':'apple', 'aa':'banana'}, {'a':'3.6', 'z':'cherry', 'aa':'peach'}, 
         {'a':'4.7', 'z':'apple', 'aa':'banana'}, {'a':'1.6', 'z':'apple', 'aa':'orange'}]

for d in reversed(dicts):
    if d['z'] == 'apple' and d['aa'] == 'banana':
        break

print(d)
# {'a': '4.7', 'z': 'apple', 'aa': 'banana'}
...