簡體   English   中英

如何獲取字典鍵組合的唯一值集?

[英]How do I get the unique set of values for a combination of dictionary keys?

我正在使用 Python 3.7。 我有一個字典列表,例如

my_dict = [{"a": 1, "b": 5, "c": 6}, {"a": 1, "b": 5, "c": 2}, {"a": 2, "b": 1, "c": 6}]

如果我想獲得單個鍵的唯一值集,例如“a”,我可以

set(d['a'] for d in my_dict)

但是我如何獲得鍵組合的唯一值集,比如“a”和“b”? 在上面的例子中,答案是

[[1, 2], [1, 5]]

以同樣的方式; 你只需要遍歷鍵。

[set(d[k] for d in my_dict) for k in ["a", "b"]]

我不完全確定要求(在什么方面是獨一無二的?),但在我的解釋中,以下工作:

> {tuple(d[i] for i in ["a", "b"]) for d in my_dict}
{(1, 5), (2, 1)}

它還執行以下操作:

> my_dict2 = [{"a": 1, "b": 5, "c": 6}, {"a": 5, "b": 1, "c": 2}, {"a": 2, "b": 1, "c": 6}]

> {tuple(d[i] for i in ["a", "b"]) for d in my_dict2}
{(1, 5), (2, 1), (5, 1)}

> [set(d[k] for d in my_dict2) for k in ["a", "b"]]
[{1, 2, 5}, {1, 5}]

OP 要求的東西沒有完全指定,但用一個例子來說明。 到目前為止,已經發布了兩個答案。 它們都不匹配請求的示例,所以我提供了一個替代方案,它與 OP 中的示例匹配。

對於使用的兩種情況

my_dict = [{"a": 1, "b": 5, "c": 6}, {"a": 1, "b": 5, "c": 2}, {"a": 2, "b": 1, "c": 6}]   # In the OP
my_dict2 = [{"a": 1, "b": 5, "c": 6}, {"a": 5, "b": 1, "c": 2}, {"a": 2, "b": 1, "c": 6}]   # In one of the answers

之前提供的 2 個選項,加上當前的選項,給出

print([set(d[k] for d in my_dict) for k in ["a", "b"]])         # Answer #1
print({tuple(d[i] for i in ["a", "b"]) for d in my_dict})       # Answer #2
print([list(set(d[k] for d in my_dict)) for k in ["a", "b"]])   # Current Answer

print([set(d[k] for d in my_dict2) for k in ["a", "b"]])        # Answer #1
print({tuple(d[i] for i in ["a", "b"]) for d in my_dict2})      # Answer #2
print([list(set(d[k] for d in my_dict2)) for k in ["a", "b"]])  # Current Answer

[{1, 2}, {1, 5}]
{(1, 5), (2, 1)}
[[1, 2], [1, 5]]           <--- As requested
[{1, 2, 5}, {1, 5}]
{(1, 5), (5, 1), (2, 1)}
[[1, 2, 5], [1, 5]]

您可以使用運算符itemgetter從字典中獲取多個值:

from operator import itemgetter

zipped = zip(*map(itemgetter('a', 'b'), my_dict))
list(map(set, zipped))
# [{1, 2}, {1, 5}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM