我想回圈瀏覽一個字典中的鍵。 然后看一個嵌套的 dictionary 是否有某個值。
但是,我在語法上有點糾結。 這就是我所寫的:
dict = {
"Bull's eye": {"Point": 50, "范圍": 60}。
"Bull": {"Point": 25, "范圍": range(55, 59)}。
"外部價值": {"點數": range(0, 20), "范圍"/span>: range(1, 54)}。
}
數字=2
for key in dict.keys()。
if number in dict[key]["Range"/span>]。
print(f "Value is in {key}"/span>)
錯誤。"TypeError: argument of type 'int' is not iterable"
注意到 "數字 "值在 "Outer values "的 "Range "字典中。 所以當回圈在嵌套的字典中找到這個值時,我希望if陳述句是True
uj5u.com熱心網友回復:這是因為在第一個字典中你有"Bull's eye"。{"點數": 50, "范圍": 60}。在這里,鍵只是一個int,所以你不能使用in關鍵字,因為一個int不是可迭代的。如果你使用這種語法,字典的 key 需要是一個可迭代的型別,比如
dict = {
"Bull's eye": {"Point": 50, "范圍": (60,)}。
"Bull": {"Point": 25, "范圍": range(55, 59)}。
"外部價值": {"點數": range(0, 20), "范圍": range(1, 54)}。
}
uj5u.com熱心網友回復:
問題是,你有不同的資料型別的Range欄位,但in運算子假設一個可迭代的(如由range函式產生)。你有幾個選擇,正如BTables所指出的,你可以確保你的dict只包含可迭代的資料 - 或者,你可以在你的回圈中檢查資料型別。
for key, value in dict_.items()。
range_ = value["Range"]
if isinstance(range_, range) and numberin range_:
print(f "Value is in {key}"/span>)
elif isinstance(range_, int) and number ==range_:
print(f "Value equals {key}"/span>)
注意,我還調整了代碼,以使用一些最佳實踐,例如在名稱已經是一個內置函式或保留關鍵字的情況下,使用尾部下劃線(_)(即,我將你的dict變數重命名為dict_)。此外,你可以直接在dict的專案上進行回圈,而不是只在鍵上進行迭代,這使得你需要在回圈中對dict進行索引。
uj5u.com熱心網友回復:
除了@BTables的回答之外,如果你想知道為什么錯誤說這不是iterable的原因,是因為python有幾種方法來解決a in B指令。首先,它檢查B中是否有特殊的方法__contains__,如果沒有,它將嘗試遍歷B(也就是如果它有特殊的方法__iter__),并做線性搜索來找到元素
>>> class A:
def __iter__(self):
yield from range(10)
>>> a=A()
>>> a
<__main__.A object at 0x0000027DC8646CD0>
>>> list(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 1 in a
True in a
>>> class B:
def __iter__(self):
yield from range(10)
def __contains__(self, item):
return False
>>> b=B()
>>> 1 in b
False in b
>>>。
和int類都沒有,因此出現了錯誤
uj5u.com熱心網友回復:
我建議你試試這個例子。(應該可以正常使用)
dict = {
"Bull's eye": {"Point": 50, "范圍": [60]}。
"Bull": {"Point": 25, "范圍": range(55, 59)}。
"外部價值": {"點數": range(0, 20), "范圍": range(1, 54)}。
}
數字=2
[print(key) for key in dict. keys() if number in dict.get(key).get('Range') ]
uj5u.com熱心網友回復:
你的代碼由于你檢查數值的方式而引發了TypeError。一些值是整數,而另一些是Range型別。 你可以檢查 2 是否在一個范圍內,但你不能檢查 2 是否在一個整數中。
你可以使用try/except塊來補救:
my_dict = {
"Bull's eye"/span>: {"Points"/span>: 50, "范圍": 60}。
"Bull": {"Point": 25, "范圍": range(55, 59)}。
"外部價值": {"點數": range(0, 20), "范圍"/span>: range(1, 54)}。
}
數字=2
for key, sub_dict in my_dict.items():
try:
if number in sub_dict["Range"] 。
print(f "number '{number}' is in key '{key}'"/span>)
except TypeError:
if number == sub_dict["Range"] 。
print(f "number '{number}' is in key '{key}'"/span>)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311658.html
標籤:
