具有 1 个和 2 个可迭代元素的列表的字典理解
Dictionary comprehension for list with both 1 and 2 iterable elements
我正在尝试 learn/understand 词典理解并具有以下列表:
my_list = [ ['sam', '99912222'],
['tom', '11122222'],
['harry', '12299933'],
['sam'],
['edward'],
['harry'] ]
此列表包含具有 1 个和 2 个可迭代对象、名称和编号的元素。
如何使用 Dictionary Comprehension 创建以下词典?
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}
但我似乎想不出正确的语法。帮忙?
快到了:
dic2 = {x[0]:x[1] for x in my_list if len(x) == 2}
对于 dict1 不可能 有一个包含重复键的字典。
有点类似于 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': ['']})
我正在尝试 learn/understand 词典理解并具有以下列表:
my_list = [ ['sam', '99912222'],
['tom', '11122222'],
['harry', '12299933'],
['sam'],
['edward'],
['harry'] ]
此列表包含具有 1 个和 2 个可迭代对象、名称和编号的元素。
如何使用 Dictionary Comprehension 创建以下词典?
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}
但我似乎想不出正确的语法。帮忙?
快到了:
dic2 = {x[0]:x[1] for x in my_list if len(x) == 2}
对于 dict1 不可能 有一个包含重复键的字典。
有点类似于 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': ['']})