python 列出到具有特定值的字典

rjjhvcjd  于 2023-04-28  发布在  Python
关注(0)|答案(3)|浏览(115)

我有名单

list_keys = ['a', 'b', 'c']
list_a = ['a', 'a1', 'a2']
list_c = ['c', 'c1', 'c2']

我需要py解决方案,将创建一个使用list_keys元素作为键和list_alist_c作为值的dict。脚本应该查看list_keys,并根据list_a的第一个元素匹配值,list_c。此外,它应该让list_keys中的元素与其他列表中的第一个值不匹配。在此处查看所需的输出:

{'a' : ['a', 'a1', 'a2'],
 'b' : [],
 'c' : ['c', 'c1', 'c2']}

我的代码片段不能正常工作,如果可能的话,我希望避免组合列表(cmb

list_keys = ['a', 'b', 'c']
list_a = ['a', 'a1', 'a2']
list_c = ['c', 'c1', 'c2']
cmb = list_a, list_c

d = {}
for k,v in zip(list_keys, cmb):
    d[k] = v
print(d)

错误输出:

{'a': ['a', 'a1', 'a2'],
 'b': ['c', 'c1', 'c2']}
8nuwlpux

8nuwlpux1#

这个例子对我来说似乎很奇怪,因为list_a, list_c是根据它们的内容命名的,所以我将改变结构以反映我如何理解实际问题(并避免shadowinglist):

keys = ['a', 'b', 'c']
values = [
    ['a', 'a1', 'a2'],
    ['c', 'c1', 'c2']]

所以现在很清楚,我们可以从values中获取每个第一个元素,并使用它来访问我们使用keys中的键创建的现有dict。

d = {k: [] for k in keys}
for v in values:
    k = v[0]
    d[k] = v

结果:

{'a': ['a', 'a1', 'a2'],
 'b': [],
 'c': ['c', 'c1', 'c2']}
rqqzpn5f

rqqzpn5f2#

我最初的解决方案包括组合列表(使将来添加更多列表更方便,并且还支持使用循环来迭代列表)。在这里,我将给予两个片段:

使用组合列表

list = ['a', 'b', 'c']
list_a = ['a', 'a1', 'a2']
list_c = ['c', 'c1', 'c2']

lists = [list_a, list_c]  # Lists to check
dic = {}
for elem in list:
    matchedList = []
    for L in lists:
        if elem == L[0]:
            matchedList = L
    dic[elem] = matchedList
print(dic)

不合并列表

list = ['a', 'b', 'c']
list_a = ['a', 'a1', 'a2']
list_c = ['c', 'c1', 'c2']

dic = {}
for elem in list:
    matchedList = []
    if elem == list_a[0]:
        matchedList = list_a
    if elem == list_c[0]:
        matchedList = list_c
    # This is what I meant, without combining lists we pretty much need to copy the same piece of code
    dic[elem] = matchedList
print(dic)

另外,只是一个提示,注意变量名list是如何着色的?这是因为list是一个 * 内置函数 * 的名称-建议 * 不要 * 将其用作变量名。(在本例中,函数list()不起作用,因为我们使用它作为变量名!)

bvpmtnay

bvpmtnay3#

字典和列表解析的组合:

list_keys = ['a', 'b', 'c']
list_a = ['a', 'a1', 'a2']
list_c = ['c', 'c1', 'c2']

d = {letter: [element for element in (list_a+list_c) if element[0] == letter] for letter in list_keys}

相关问题