2 Вопрос: Поиск, если ключ словаря содержит элементы в Python

вопрос создан в Wed, May 8, 2019 12:00 AM

Если у меня есть следующий словарь и список, могу ли я посмотреть, содержатся ли элементы в списке в ключах словаря?

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

('dict', {'2D 4D': 0, '1B 2C': 0})
('list', ['2B', '2D', '3D', '4D', '4A'])

поэтому, когда вы спрашиваете что-то похожее на

if key in dict:  //if '2D' is in dict
dict[key]+=1     //{'2D 4D': 1}
    
1
  1. создайте дополнительный словарь из оригинального dic, например {'2D': ['2D 4D'], '4D': ['2D 4D'], '1B': ['1B 2C'], '2C': ['1B 2C']}, и используйте его для поиска ключей в оригинальном dic по искомому термину.
    2019-05-08 15: 56: 04Z
2 ответа                              2                         

Вы можете сравнить каждую запись ключа dict со всеми в вашем списке. В целях чистого кода не используйте dict/list в качестве имен переменных:

mdict = {'2D 4D': 0, '1B 2C': 0}
mlist = ['2B', '2D', '3D', '4D', '4A']
for k in mdict.keys():
    for e in mlist:
        if e in k:
            mdict[k] += 1
# mdict:
{'1B 2C': 0, '2D 4D': 2}

Если у вас огромный список слов или словарных статей, это будет медленно. Я предлагаю реализовать три ваших записей в списке и повторять их, что уменьшит сложность из O (M * N) - O (N + M).

    
2
2019-05-08 15: 54: 19Z
  1. есть ли способ подсчитать количество элементов в ключе? то есть len(2D 4D) = 2?
    2019-05-08 16: 02: 23Z
  2. print ([(key, len (key.split (''))) для ключа в mdict.keys ()]) @WilliamMerritt
    2019-05-08 16: 16: 37Z
  3. Чтобы добавить в @ncica, если ваш список содержит много дубликатов, вы можете сначала выполнить collections.Counter(mlist), а затем перебрать ключи, сэкономить тонны времени.
    2019-05-08 17: 46: 40Z

Если предполагается, что ключи dict должны иметь пробел в середине, вы также можете использовать это.

a = {'2D 4D': 0, '1B 2C': 0}
b = ['2B', '2D', '3D', '4D', '4A']
for i in a.keys():
    a[i]=len(set(i.split()).intersection(b))

ВЫВОД:

 {'2D 4D': 2, '1B 2C': 0}
    
0
2019-05-08 16: 17: 52Z
источник размещен Вот