Поиск существования нескольких значений в словаре - PullRequest
0 голосов
/ 04 февраля 2020

Есть ли лучший (pythoni c) способ достижения приведенного ниже результата. Ищем наличие нескольких значений в списке элементов словаря.

Я думаю, что приведенное ниже решение не масштабируемо, если мне нужно сопоставить больше элементов в словаре.

>>> mylist=[{'fruit':'apple', 'quantity':'200'},{'fruit':'orange', 'quantity':'300'},{'fruit':'apple', 'quantity':'100'}]
>>> a = 'apple'
>>> b = '200'
>>> for i in mylist:
...     if a in i.values() and b in i.values(): print(a,b)
...     
... 
apple 200

Ответы [ 4 ]

2 голосов
/ 04 февраля 2020

Вы можете проверить, является ли {a,b} подмножеством набора, составленного из значений каждого словаря.

if any({a,b}.issubset(set(d.values())) for d in mylist):
   print('found')
0 голосов
/ 05 февраля 2020

Я думаю, что нам нужно больше информации, чтобы найти идеальное решение. Текущий пример, которым вы поделились, слишком прост c, чтобы быть очень полезным.

До тех пор, вот как я мог бы изменить этот пример игрушки:

fruit_tuples = [('apple', 200), ('orange', 300), ('apple', 100)]

targ_tuple = ('apple', 200)

for curr_tuple in fruit_tuples:
    if curr_tuple == targ_tuple:
        print(curr_tuple)

Вывод:

('apple', 200)
0 голосов
/ 04 февраля 2020

Здесь вы go. Это должно сделать трюк в 1 строку:

mylist=[{'fruit':'apple', 'quantity':'200'},{'fruit':'orange', 'quantity':'300'},{'fruit':'apple', 'quantity':'100'}]

a = "apple"
b = "200"

print ''.join(['{0} {1}'.format(a, b) for li in mylist if a in li.values() and b in li.values()])

>>> apple 200
0 голосов
/ 04 февраля 2020

Вот простой способ pythoni c, основанный на списках . Вам просто нужно отформатировать вывод, как вы хотите.

>>> [(a, b) for i in mylist if a in i.values() and b in i.values()]
[('apple', '200')]

Я также проверяю эту компактную версию, и она работает:

>>> [(a, b) for i in mylist if (a and b) in i.values()]
[('apple', '200')]
...