[英]Creating New dictionary from two dictionaries with Key as First dict's Value, and Value as the second dict's Value
[英]Accessing value in a dict ignoring the key's second value
我有一個字典L,其鍵是長度為2的元組:第一個元素是索引,第二個元素是0或1。我定義了幾個函數。 在其中之一中,我需要考慮元組的第二個元素,因此我需要將其保留在那里。 但是現在我在另一個功能上遇到了麻煩,我根本不在乎它。 我必須檢索給定索引(元組的第一個元素)的dict值,但是我不知道第二個值是0還是1。是否有一個靜音變量,或者我可以傳遞的東西,它說“ 0還是1”?
為了使事情更清楚,我想做些類似的事情:
needed_value = L.get((given_index, either))
其中“任一個”可以為0或1。
現在,我創建了一個if / else,但是看起來很愚蠢,因為它們的主體都分配了值。
非常感謝您,我希望我不會錯過這個問題的既有解決方案!
編輯:
我的字典是這樣的:
L = {(7, 1): 0, (2, 0): 1, (5, 1): 4, (1, 1): 2, (11, 0): 3}
因此,我肯定知道鍵中的第二個值是0或(不包括)1。此外,第一個值是唯一的(如果相關)。
if / else的代碼是(或多或少,我不再使用它了):
if (i, 1) in L.keys():
tau = L.get((i, 1))
elif (i, 0) in L.keys():
tau = L.get((i, 0))
不,沒有辦法做到這一點。 如果只需要按第一部分檢索元素,則應使用該鍵並將另一部分存儲在值中。
否。字典鍵是散列的,您無法使用部分元組匹配來查詢它們的數據庫樣式。
你可以做什么,如果你確信是 0或1的情況下(但,為了清晰和在Python <3.6,而不是兩個),是使用的可選備用參數dict.get
:
L = {(10, 1): 5, (10, 2): 6, (10, 3): 7}
val = L.get((10, 0), L.get((10, 1)))
print(val) # 5
另外,要考慮到同時存在(10, 0)
和(10, 1)
,可以使用自定義函數:
L = {(10, 1): 5, (10, 2): 6, (10, 3): 7, (10, 0): 8}
def get_val(x, key):
try:
return x[(key, 0)]
except KeyError:
return x[(key, 1)]
val = get_val(L, 10)
print(val) # 8
假設您有這樣的事情:
L = {(10, 1): 5, (10, 0): 6, (20, 0): 7}
並且您想要獲取與以10開頭的鍵對應的所有值 ,又名(10, 0)
10,0 (10, 0)
和(10, 1)
to_match = 10
你可以做:
res = [v for k, v in L.items() if any(k == (to_match, x) for x in (0, 1))]
返回:
[5, 6]
正如大家已經提到的那樣,您不能開箱即用。 現在,如果您需要兩種方法來獲取值-一種是從完整鍵獲取,另一種是從“部分”鍵獲取,則解決方案可能是並行維護key[0]=>[keys...]
映射,即:
L = {(10, 1): 5, (10, 0): 6, (20, 0): 7}
index = defaultdict(list)
for key in L:
index[key[0]].append(key)
然后,您可以獲得部分鑰匙的“完整”鑰匙清單
keys = index.get(10)
values = [L[k] for k in keys]
當然,這意味着您必須確保索引保持最新,因此需要將所有這些包裝在一個類中,以確保所有對L
更新都反映在index
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.