Skip to main content
 首页 » 编程设计

python之如果值在字典中,则将键添加到数组中,否则将值添加到不同的列表中

2025年05月04日22虾米姐

我有以下字典:

d = {'a': 1, 'B':2, 'C': 3, 'D':4, 'E': 5} 

我的以下代码:

arr = " a b c"  
arr_list = [d[a] for a in arr.split(" ")] 

给我这个输出:

 [1 2 3] 

但是当我传入以下字符串时:

arr = " a b c 1125" 

我收到以下错误:

KeyError: '1125' 

这是有道理的,因为在我的字典中没有 1125 的关键字。但我想做的是将以下内容传递给我的函数:

arr = "a b c 1125" 

得到如下输出:

list1 = [1,2,3] 

然后是另一个没有键值的列表

list2 = [1125] 

总而言之,有些人帮助我弄清楚如何将字典中没有键的值添加到新列表中,以及如何将具有键的值添加到另一个列表中?

感谢任何帮助。

请您参考如下方法:

一开始我以为@ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 answers可能是最快的答案,如果您不想尝试并捕捉错误,您可以做我的一个例子:

list1=[] 
list2=[] 
d = {'a': 1, 'B':2, 'C': 3, 'D':4, 'E': 5} 
arr = " a b c 1125" 
for e in arr.split(" "): 
    if e in d.keys(): 
        list1.append(d[e]) 
    else: 
        list2.append(e) 

(如果你愿意为了更少的代码行而牺牲更多的速度,你可以做两个列表理解......)

d = {'a': 1, 'B':2, 'C': 3, 'D':4, 'E': 5} 
arr = " a B C 1125" 
list1 = [d[e] for e in arr.split() if e in d] 
list2 = [e for e in arr.split() if e not in d] 

但现在我用 timeit.timeit 做了一个测试,我惊讶地发现实际上这并不是最快的方法。

d = {'a': 1, 'B':2, 'C': 3, 'D':4, 'E': 5} 
arr = " a b c 1125" 
# Functions 
# ... 
if __name__ == "__main__": 
    import timeit 
 
    print(timeit.timeit("a()", setup="from __main__ import a")) 
    print(timeit.timeit("b()", setup="from __main__ import b")) 
    print(timeit.timeit("c()", setup="from __main__ import c")) 
    print(timeit.timeit("D()", setup="from __main__ import D")) # D instaed of d because that is the OP dictionary 

a() 是我的第一个函数,b() 是我的第二个函数,c() @ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 answers D() 是 @Mike Robinsy answers .输出是:

2.4083618169348338 
2.548082368010459 
3.629124371952302 
1.7721276028098547 

因此,速度更快的是 Mike,然后是我,最后是 Whack。但选择编码风格由您决定:try-catch、循环和理解,或集合和 &。