Как я могу найти подходящие элементы между словарем и списком, чтобы создать новый список из совпадений? - PullRequest
2 голосов
/ 02 мая 2019

У меня есть два набора данных - словарь (данные) и список (список_1), которые имеют разную длину.Я хотел бы перебрать оба и сделать следующее:

  1. Если элемент в list_1 совпадает с ключевыми данными, добавить значение во второй список.
  2. Если элемент отсутствует в словаре, вместо него добавьте «NULL»

3-й список должен быть такой же длины, как list_1

Вот пример кода:

a = ['dim','john','joey','tron','bob','wilt','kobe']
b = [1,2,3,4,5,6,7]
data = dict(zip(a,b))

list_1 = ['bob','sue','mike','willy','john','may','beth','wilt']

list_2 = []

for x in list_1:
    for key,value in data.items():
        if x in key:
            list_2.append(key)
        elif x not in key:
            list_2.append("NULL")

Результатом этого будет

['NULL', 'NULL', 'NULL', 'NULL', 'bob', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'john', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'wilt', 'NULL']

Можно ли отобразить третий список следующим образом?

['bob','NULL','NULL','NULL','john','NULL','NULL','wilt']

Ответы [ 3 ]

2 голосов
/ 02 мая 2019

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

list_1 = ['bob','sue','mike','willy','john','may','beth','wilt']
list_2 = []

for x in list_1:
    if x in data.keys():
        list_2.append(x)
    else:
        list_2.append("NULL")

Если вы хотите быть модным и лаконичным, вы можете использовать понимание списка.

list_2 = [x if x in data.keys() else "NULL" for x in list_1]
1 голос
/ 02 мая 2019

Просто прокрутите список один раз.

for x in list_1:
    if x in list(data.keys()):
        list_2.append(x)
    else:
        list_2.append('NULL')
0 голосов
/ 03 мая 2019

Если вы проверите длину вывода с помощью функции len (), вы получите 56 = length_of_list1 (8) * length_of_data (7). Но вам нужен только список 2 той же длины, что и list1, поэтому вы можете видеть, что цикл for key,value in data.items(): является избыточным. Вы можете использовать функцию find в словаре if x in data.keys(): для проверки, нет необходимости проверять x с помощью k один за другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...