Понимание словаря для списка с 1 и 2 итеративными элементами - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь выучить / понять словарь и получить следующий список:

my_list = [ ['sam', '99912222'], 
          ['tom', '11122222'], 
          ['harry', '12299933'], 
          ['sam'], 
          ['edward'], 
          ['harry'] ]

Этот список содержит элементы с итерациями 1 и 2, именем и числом.

С помощью словарного понимания, как я могу создать следующие словари?

dic1 = {'sam':'99912222',
        'tom':'11122222',
        'harry' :'12299933',
        'sam':'',
        'edward':'',
        'harry':''}

dic2 = {'sam':'99912222',
        'tom':'11122222',
        'harry' :'12299933'}

Если бы список содержал итерируемые элементы с двумя элементами, это сработало бы:

dic_all_iterables = {k:v for k,v in my_list}

Я попытался вариантыследующие безуспешно:

dic2 = {k:v for k,v in my_list if not v is None}
#and
dic2 = {k:(v if not v is not none else '') for k,v in my_list}
#and
dic2 = {k:v for k,v in my_list if len(x)>1 in x for my_list}

Но я не могу понять правильный синтаксис.Помощь

Ответы [ 2 ]

4 голосов
/ 12 марта 2019

Почти там:

dic2 = {x[0]:x[1] for x in my_list if len(x) == 2}

Для dict1 невозможно иметь словарь с повторными ключами .

2 голосов
/ 12 марта 2019

Что-то похожее на dic1:

from collections import defaultdict

d = defaultdict(list)

for lst in my_list:
    try:
        k, v = l
    except ValueError:
        k, = l
        v = ""
    finally:
        d[k].append(v)

print(d)

Выход:

defaultdict(list,
            {'sam': ['99912222', ''],
             'tom': ['11122222'],
             'harry': ['12299933', ''],
             'edward': ['']})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...