gpt4 book ai didi

python - 字典理解中的三元表达式

转载 作者:行者123 更新时间:2023-12-04 23:02:01 26 4
gpt4 key购买 nike

我正在尝试反转字典。在许多键具有相同值的情况下,新键(旧值)应与一组新值(旧键)相关联。我解决了这个问题,但我正在尝试使用字典理解和一些辅助方法进行重构。

def has_unique_value(k):
return d.values().count(d[k]) == 1

def keys_with_same_value_as_key(k):
return set([key for key in d.keys() if d[key] == d[k]])

print( {d[k]:k if has_unique_value(k) else d[k]:keys_with_same_value_as_key(k) for k in d.keys()} )

但是,这会引发语法错误
print( {d[k]:k if has_unique_value(k) else d[k]:keys_with_same_value_as_key(k) for k in d} )
^
SyntaxError: invalid syntax

希望该代码中的对齐方式正确。它应该指向第二个 : ,在 else条款。知道这里发生了什么吗?我已经尝试了尽可能多的括号形式。

最佳答案

关闭!

以下代码

d = {'a': 'x', 'b': 'y', 'c': 'x'}

def has_unique_value(k):
return d.values().count(d[k]) == 1

def keys_with_same_value_as_key(k):
return set([key for key in d.keys() if d[key] == d[k]])

print( {d[k]:k if has_unique_value(k) else keys_with_same_value_as_key(k) for k in d.keys()} )

生产
{'y': 'b', 'x': set(['a', 'c'])}

唯一的区别是第二个 d[k]:已移除。

一般来说,三元表达式看起来像
a = val_if_true if test else val_if_false

不是更接近你所拥有的东西:
a = val_if_true if test else a = val_if_false

您可以在开始时指定三元表达式中的值应该去哪里。

RE:评论中的问题

这仍然绝对是字典理解。

它基本上执行以下操作:
m = {}
for k in d.keys():
orig_key = k
orig_val = d[k]

if has_unique_value(k):
m[orig_val] = orig_key
else:
m[orig_val] = keys_with_same_value_as_key(orig_key)

print m

唯一的区别是,在字典理解中, m字典没有保存在命名空间中(我用来澄清代码的变量 orig_keyorig_val 从来不存在)。

关于python - 字典理解中的三元表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21209402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com