python - 使用基于列表列表中的项目的键创建 Python 字典

标签 python python-3.x list dictionary defaultdict

我正在创建一个字典,其中如果键有 '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']]

我如何创建两个字典,将它们命名为 rdictedict 其中:

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, 默认值)
    • 如果key不存在,则按默认设置key
    • 并且始终返回key本身的值。
  • d1.items() 中的值(类别、键):
    • 您可以解压固定长度的元组、列表或其他序列。
    • 所以它相当于:
for value, tuple_ in d1.items():
    category, key = tuple_

关于python - 使用基于列表列表中的项目的键创建 Python 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64886165/

相关文章:

python - 返回后跟空格的特定字符或单词 - Regex Python

python - 在 python 中创建递归列表长度检查器

c# - 使用 LINQ 从索引不等于 int 的列表中获取项目

Python:对于字符串列表:拉出字符串中的第一个 3-6 位数字和同一字符串中的第二个 3-6 位数字,并用空格分隔

python - 使用 DatetimeIndex reshape Pandas 数据框以制作网格

python - python装饰器可以用来改变函数返回的函数的行为吗?

python - 如何访问嵌套在 dict 中的元组切片?

python - 如何让streamHandler每次都覆盖

python - 为什么 python F string 模块不起作用?

python 列表和子列表