亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Python中,如何在字典數組中查找值相同的鍵?

在Python中,如何在字典數組中查找值相同的鍵?

智慧大石 2023-09-12 15:51:57
我正在使用Python 3.8。我有一系列字典,所有字典都有相同的鍵......list_of_dicts = [{"a": 1, "b": 2}, {"a": 1, "b": "zz"}, {"a": 1, "b": "2"}]如何返回所有值都相同的鍵列表?例如,上面的內容只是["a"]因為所有三個字典都有“a”= 1。
查看完整描述

6 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊


array_of_dicts = [{"a": 1, "b": 2}, {"a": 1, "b": "zz", "c": "cc"}, {"a": 1, "b": "2"}]


def get_same_vals(dicts):

  keys = []

  for key in dicts[0].keys():

    is_same = True

    for each_dict in array_of_dicts:

      if not key in each_dict or  each_dict[key] != dicts[0][key]:

        is_same = False

    if is_same:

      keys.append(key)

  return keys


print(get_same_vals(array_of_dicts))  


查看完整回答
反對 回復 2023-09-12
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

正如其他答案中所建議的,創建一個對每個鍵進行分組的主字典,然后檢查它們的唯一性。


# all keys are the same, so get the list

keys = array_of_dicts[0].keys()


# collapse values into a single dictionary

value_dict = {k: set(d[k] for d in array_of_dicts) for k in keys}


# get list of all single-valued keys

print([k for k, v in value_dict.items() if len(v) == 1])


查看完整回答
反對 回復 2023-09-12
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

這是一個可能的解決方案,它也適用于字典結構不同(具有不同/額外鍵)的情況:


array_of_dicts = [{"a": 1, "b": 2}, {"a": 1, "b": "zz"}, {"a": 1, "b": "2"}]


def is_entry_in_all_dicts(key, value):

    identical_entries_found = 0

    for dict in array_of_dicts:

        if key in dict:

            if dict[key] == value:

                identical_entries_found += 1

    if identical_entries_found == len(array_of_dicts):

        return True

    return False

                

result = []

for dict in array_of_dicts:

    for key, value in dict.items():

        if is_entry_in_all_dicts(key, value):

            if key not in result:

                result.append(key)

print(result)

輸出

['a']


查看完整回答
反對 回復 2023-09-12
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

如果您確定它們都具有相同的鍵,則可以像這樣迭代它們的鍵和列表:


array_of_dicts = [{"a": 1, "b": 2}, {"a": 1, "b": "zz"}, {"a": 1, "b": "2"}]


def get_same_vals(dicts):

  keys = []

  for key in dicts[0].keys():

    is_same = True

    for each_dict in dicts:

      if each_dict[key] != dicts[0][key]:

        is_same = False

    if is_same:

      keys.append(key)

  return keys


print(get_same_vals(array_of_dicts))

# Prints ['a']

對于低效的代碼,我深表歉意;我沒有花那么長時間來編寫這個代碼。


查看完整回答
反對 回復 2023-09-12
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

如果每個字典都有相同的鍵,您可以將這些值組合成集合并查找包含一個元素的集合:

[list(x.keys())[0] for x in [{k:set([e[k] for e in list_of_dicts])} for k in list_of_dicts[0]] if len(list(x.values())[0]) == 1]

輸出:

['a']


查看完整回答
反對 回復 2023-09-12
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

這是一個更簡潔的方法


from functools import reduce

array_of_dicts = [{"a": 1, "b": 2}, {"a": 1, "c": "zz"}, {"a": 1, "d": "2"}]

result = reduce(lambda a, b: a.intersection(b),list(map(lambda x: set(x.keys()), 

                array_of_dicts)))


查看完整回答
反對 回復 2023-09-12
  • 6 回答
  • 0 關注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號