[英]Creating Python dictionaries with keys based on items in list of list
I'm creating a dictionary where if the key has an 'R'
then one list, otherwise it goes in the list for 'E'
.我正在创建一个字典,如果键有一个
'R'
那么一个列表,否则它会进入'E'
的列表。 My code so far:到目前为止我的代码:
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])
Output is:输出是:
rlist = [['SFEN', 'SSW 564'], ['SFEN', 'SSW 567']]
elist = [['SYEN', 'SSW 540'], ['SFEN', 'CS 501']]
How could I create two dictionaries, call them rdict
and edict
where:我怎么可以创建两个库,给他们打电话
rdict
和edict
,其中:
rdict = {'SFEN': ['SSW 564','SSW 567']}
edict = {'SYEN': ['SSW 540'], 'SFEN': ['CS 501']}
There could be more values than just 'SYEN'
and 'SFEN'
so it needs to be any particular first element in the list.可能有更多的值,而不仅仅是
'SYEN'
和'SFEN'
因此它需要是列表中的任何特定第一个元素。
If I try something like:如果我尝试类似的事情:
mlist = {}
for list in rlist:
if list[0] in rlist:
mlist.append(list[1])
else:
mlist[list[0]].append(list[1])
I get KeyError: 'SFEN'
.我得到
KeyError: 'SFEN'
。 Could I use defaultdict for this?我可以为此使用 defaultdict 吗?
There is a way to create m_dict
from d1
directly.有一种方法可以直接从
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)
output:输出:
{'E': {'SYEN': ['SSW 540'], 'SFEN': ['CS 501']}, 'R': {'SFEN': ['SSW 564', 'SSW 567']}}
Explanation:解释:
dict.setdefault(key, default)
key
by default
if key
doesn't exist.key
不存在,它default
设置为key
。key
itself.key
本身的值。for value, (category, key) in d1.items():
for value, tuple_ in d1.items():
category, key = tuple_
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.