将两个列表合并成一个有例外情况的字典的挑战

1 人关注

我试图将两个列表合并成一个字典,同时排除第一个列表中的整数和第二个列表中的字符串。

list1 = ["A","B","C","D","E" ,"F", 1 ,"G", 3 ,"H","I","J","K","L"]
list2 = [20 ,27 , "Arm","Leg", 13 , 24 ,"Head", 75 , 64 , 71 ,"Ankle", 82 , 45 , 23]

I tried using the code below:

dictchallenge ={[x for x in list1 if  isinstance(x, str)][i]: [x for x in list2 if isinstance(x, int)][i] for i in range(len([x for x in list1 if  isinstance(x, int)]))}
print(dictchallenge)

The output of the code is:

{'A': 20, 'B': 27}

代码只是将keys列表中的前两个字符串与value列表中的前两个整数合并,我需要像这样将第一个列表中的所有keys与第二个列表中的所有value合并。

{'A': 20, 'B': 27, 'E': 13, 'F': 24, 'G': 75, 'H': 71, 'J': 82, 'K': 45, 'L': 23 }

如果有人能帮我解决这个问题,谢谢。

3 个评论
尽量不要在一条线上做所有事情,你只是在伤害自己。
看看 len([x for x in list1 if isinstance(x, int)]) 产生了什么,你就会明白这个问题。 请不要试图节省代码行数--你这样做是在伤害可读性和性能。
谢谢你的建议,我把它写在一行,因为教授给我们的挑战是写出最短的程序来做。我试着用len([x for x in list1 if isinstance(x, str)]),结果得到了一个没有索引的错误列表。
python
list
dictionary
ZeRoX
ZeRoX
发布于 2021-06-23
3 个回答
user15780176
user15780176
发布于 2021-06-25
0 人赞同

Try this:

list1 = ["A", "B", "C", "D", "E", "F", 1, "G", 3, "H", "I", "J", "K", "L"]
    list2 = [20, 27, "Arm", "Leg", 13, 24, "Head", 75, 64, 71, "Ankle", 82, 45, 23]
    for i in list1:
        for j in list2:
            if str(j).isdigit()==True and list1.index(i)==list2.index(j):
                d[i]=j
print(d)
    
Silveris
Silveris
发布于 2021-06-25
0 人赞同

你可以做的是首先从两个列表中获取你不需要的索引。

>>> indexes = [i for i in range(len(list1)) if not isinstance(list1[i], str)]
>>> indexes += [i for i in range(len(list2)) if not isinstance(list2[i], int)]

Then you get rid of the elements you don't need:

>>> clean_list1 = [list1[i] for i in range(len(list1)) if i not in indexes]
>>> clean_list2 = [list2[i] for i in range(len(list2)) if i not in indexes]

最后,你可以把两份名单都拉上拉链。

>>> dict(zip(clean_list1, clean_list2))
{'A': 20, 'B': 27, 'E': 13, 'F': 24, 'G': 75, 'H': 71, 'J': 82, 'K': 45, 'L': 23}
    
非常感谢你的建议,我认为最简单的方法是像你那样使用zip,唯一的问题是大学里的教授给了一个挑战,要写一个最短的程序来做,而不使用zip。
El Mehdi
El Mehdi
发布于 2021-06-25
0 人赞同

简单的方法是使用一个for循环,并检查 list1 是否有键为 string list2 有作为一个 int ,如果把它添加到一个 dict output and increment i and j .

list1 = ["A","B","C","D","E" ,"F", 1 ,"G", 3 ,"H","I","J","K","L"]
list2 = [20 ,27 , "Arm","Leg", 13 , 24 ,"Head", 75 , 64 , 71 ,"Ankle", 82 , 45 , 23]
output = {}
for i in range(len(list1)):
    if isinstance(list1[i] , str):
        if isinstance(list2[i] , int):
            output[list1[i]] = list2[i]
print(output)