我有以下字典:
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、循环和理解,或集合和 &。
