Python 3 фильтрует список упорядоченных элементов dict по заданному значению ключа c - PullRequest
0 голосов
/ 03 апреля 2020

Я перебираю список других переменных списка в упорядоченную словарную переменную и добавляю их в новую переменную списка. Я пытаюсь отфильтровать новые упорядоченные записи в формате dict, чтобы получить результаты, только если переменная 8 в списке равна "C". Приведенный ниже код дает мне ошибку значения.

    keys = ['key1', 'key2', 'key3', 'key4', 'key5', 'key6', 'key7', 'key8']
    blank_list = []
    for a in list(zip(var1, var2, var3, var4, var5, var6, var7, var8):
        orglist = OrderedDict(zip(keys, a))
        orglist2 = {a: b for a, b in orglist if b[8] == 'C'}
        blank_list.append(orglist2)

Как это исправить, чтобы получать только значения orderdict, где var8 равно указанному c значению ('C') ? Результатом должен быть список упорядоченных объектов dict, где var8 равно 'C' независимо от того, что равны другим переменным. Другие потенциальные значения для var8 могут быть пустыми или отсутствовать.

1 Ответ

1 голос
/ 03 апреля 2020

Если вы хотите сохранить свой подход, это следует исправить:

keys = ['key1', 'key2', 'key3', 'key4', 'key5', 'key6', 'key7', 'key8']
blank_list = []
for a in zip(var1, var2, var3, var4, var5, var6, var7, var8):
    orglist = OrderedDict(zip(keys, a))
    orglist2 = {a: b for a, b in orglist.items() if b[6] == 'C'}
    blank_list.append(orglist2)

Ваша проблема заключалась в том, что for a, b in orglist не будет работать, потому что итерация по словарю дает только ключи словаря.

но, возможно, это будет более читабельным:

for a in zip(var1, var2, var3, var4, var5, var6, var7, var8):
    if a[6] == 'C':
        blank_list.append(dict(zip(keys, a)))

или

for a in zip(var1, var2, var3, var4, var5, var6, var7, var8):
    orglist = OrderedDict(zip(keys, a))
    if orglist['key7'] == 'C':
        blank_list.append(orglist)
...