根据列表列表中的项目创建 Python 个带有键的字典
Creating Python dictionaries with keys based on items in list of list
我正在创建一个字典,如果键有一个 'R'
则一个列表,否则它会进入 'E'
的列表。到目前为止我的代码:
d1 = {'SSW 540': ['E', 'SYEN'], 'SSW 564': ['R', 'SFEN'], 'SSW 567': ['R', 'SFEN'], 'CS 501': ['E', 'SFEN']}
rlist = []
elist = []
for k, v in d1.items():
if v[0] == 'R':
rlist.append([v[1], k])
elif v[0] == 'E':
elist.append([v[1], k])
输出为:
rlist = [['SFEN', 'SSW 564'], ['SFEN', 'SSW 567']]
elist = [['SYEN', 'SSW 540'], ['SFEN', 'CS 501']]
我如何创建两个词典,将它们命名为 rdict
和 edict
其中:
rdict = {'SFEN': ['SSW 564','SSW 567']}
edict = {'SYEN': ['SSW 540'], 'SFEN': ['CS 501']}
值可能不只是 'SYEN'
和 'SFEN'
,因此它需要是列表中任何特定的第一个元素。
如果我尝试这样的事情:
mlist = {}
for list in rlist:
if list[0] in rlist:
mlist.append(list[1])
else:
mlist[list[0]].append(list[1])
我得到 KeyError: 'SFEN'
。我可以为此使用 defaultdict 吗?
有一种方法可以直接从 d1
创建 m_dict
。
d1 = {
'SSW 540': ['E', 'SYEN'],
'SSW 564': ['R', 'SFEN'],
'SSW 567': ['R', 'SFEN'],
'CS 501': ['E', 'SFEN'],
}
m_dict = {}
for value, (category, key) in d1.items():
m_dict.setdefault(category, {}).setdefault(key, []).append(value)
print(m_dict)
输出:
{'E': {'SYEN': ['SSW 540'], 'SFEN': ['CS 501']}, 'R': {'SFEN': ['SSW 564', 'SSW 567']}}
解释:
dict.setdefault(key, default)
- 如果
key
不存在,则由 default
设置为 key
。
- 并且return总是
key
本身的值。
for value, (category, key) in d1.items():
- 您可以解包固定长度的元组、列表或其他序列。
- 所以它等同于:
for value, tuple_ in d1.items():
category, key = tuple_
我正在创建一个字典,如果键有一个 'R'
则一个列表,否则它会进入 'E'
的列表。到目前为止我的代码:
d1 = {'SSW 540': ['E', 'SYEN'], 'SSW 564': ['R', 'SFEN'], 'SSW 567': ['R', 'SFEN'], 'CS 501': ['E', 'SFEN']}
rlist = []
elist = []
for k, v in d1.items():
if v[0] == 'R':
rlist.append([v[1], k])
elif v[0] == 'E':
elist.append([v[1], k])
输出为:
rlist = [['SFEN', 'SSW 564'], ['SFEN', 'SSW 567']]
elist = [['SYEN', 'SSW 540'], ['SFEN', 'CS 501']]
我如何创建两个词典,将它们命名为 rdict
和 edict
其中:
rdict = {'SFEN': ['SSW 564','SSW 567']}
edict = {'SYEN': ['SSW 540'], 'SFEN': ['CS 501']}
值可能不只是 'SYEN'
和 'SFEN'
,因此它需要是列表中任何特定的第一个元素。
如果我尝试这样的事情:
mlist = {}
for list in rlist:
if list[0] in rlist:
mlist.append(list[1])
else:
mlist[list[0]].append(list[1])
我得到 KeyError: 'SFEN'
。我可以为此使用 defaultdict 吗?
有一种方法可以直接从 d1
创建 m_dict
。
d1 = {
'SSW 540': ['E', 'SYEN'],
'SSW 564': ['R', 'SFEN'],
'SSW 567': ['R', 'SFEN'],
'CS 501': ['E', 'SFEN'],
}
m_dict = {}
for value, (category, key) in d1.items():
m_dict.setdefault(category, {}).setdefault(key, []).append(value)
print(m_dict)
输出:
{'E': {'SYEN': ['SSW 540'], 'SFEN': ['CS 501']}, 'R': {'SFEN': ['SSW 564', 'SSW 567']}}
解释:
dict.setdefault(key, default)
- 如果
key
不存在,则由default
设置为key
。 - 并且return总是
key
本身的值。
- 如果
for value, (category, key) in d1.items():
- 您可以解包固定长度的元组、列表或其他序列。
- 所以它等同于:
for value, tuple_ in d1.items():
category, key = tuple_