Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回两个字典中最大的键_Python_Python 3.x - Fatal编程技术网

Python 返回两个字典中最大的键

Python 返回两个字典中最大的键,python,python-3.x,Python,Python 3.x,假设我们有两个字典: a = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7} b = {0:0, 1:7, 2:6, 3:5, 4:4, 5:3, 6:2, 7:1} 由于在字典中,在0和4位置匹配的键与值对类似于a[0]==b[0]和a[4]==b[4],但我只想返回键4,因为它更高。在python3中: max([k1 for (k1, v1), (k2, v2) in zip(a.items(), b.items()) if v1 == v2]) 在p

假设我们有两个字典:

a = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7}
b = {0:0, 1:7, 2:6, 3:5, 4:4, 5:3, 6:2, 7:1}
由于在字典中,在
0
4
位置匹配的键与值对类似于a[0]==b[0]和a[4]==b[4],但我只想返回键
4
,因为它更高。

在python3中:

max([k1 for (k1, v1), (k2, v2) in zip(a.items(), b.items()) if v1 == v2])
在python 3中:

a = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7}
b = {0:0, 1:7, 2:6, 3:5, 4:4, 5:3, 6:2, 7:1}

max(k for k in a.keys() if k in b and a[k] == b[k])
考虑到如果两个DICT中没有公共密钥和值对,将引发
ValueError
。使用
尝试:。。。除了ValueError:…
语句之外,请正确处理此问题

让我们把它分成几个部分,以便更准确地理解它:

[k for k in a.keys()]
它将迭代第一个
dict
a
)中的所有键。现在我们要过滤它:

[k for k in a.keys() if k in b]
第一个过滤步骤确保密钥也在第二个
dict
b
)中

第二步确保这两个dict的值对于这个键是相同的。现在我们已经有了一个列表,其中包含了在
dict
s中具有相同值的所有键

max([k for k in a.keys() if k in b and a[k] == b[k]])
列表理解可以用生成器代替,因为我们不需要
列表本身,所以方括号可以删除

max(k for k in a.keys() if k in b and a[k] == b[k])
计算列表的最大值。如果列表为空,则会在此处引发
ValueError
,如
max([])
引发
ValueError
。这意味着没有公共的键值对

try:
    print(max(k for k in a.keys() if k in b and a[k] == b[k]))
except ValueError:
    print("No common pair of key-value.")

也可以在此处使用“设置交点”:

a = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7}
b = {0:0, 1:7, 2:6, 3:5, 4:4, 5:3, 6:2, 7:1}

matches = set(a.items()).intersection(b.items())
# {(0, 0), (4, 4)}

try:
    print(max(matches)[0])
except ValueError:
    print("Cannot get max of empty set")

# 4

我建议您在Python3中使用这个非常基本的解决方案。除目前提出的其他解决方案外,如果两个字典之间没有公共键/值对,则不会出错。为了更好地理解和可读性,我还添加了许多注释:

a = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7}
b = {0:0, 1:7, 2:6, 3:5, 4:4, 5:3, 6:2, 7:1}

# Initialize the result (output)
result = None

# Get the common keys between the 2 dictionaries
commonKeys = [k for k in a.keys() if k in b.keys()]

# Loop on these common keys
for k in commonKeys:
    # Update result:
    # - if the value is identical between the 2 dictionaries
    # - and if current result is lower than this value
    if a[k] == b[k]:
        if ((result == None) or (result < a[k])):
            result = a[k]

# Display result value ("None" if not found)
print(result)
a={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7}
b={0:0,1:7,2:6,3:5,4:4,5:3,6:2,7:1}
#初始化结果(输出)
结果=无
#获取两个字典之间的公用键
commonKeys=[k表示a.keys()中的k,如果b.keys()中的k为k]
#在这些公用键上循环
对于公用键中的k:
#更新结果:
#-如果两个字典之间的值相同
#-如果当前结果低于该值
如果a[k]==b[k]:
如果((结果==无)或(结果
a
中的键4与
b
中的键4相同吗?请澄清您的问题,谢谢:)字典a&b的最大键是7。请明确问题的目的是的,
a
中的键
4
b
中的键
4
相同。谢谢,你想要一本新的合并字典,它的值最大吗?还是只返回一个键?
a[0]==b[0]
a[4]==b[4]
是按键和值匹配的,但我只想返回键[4],因为它的值较高,我认为您不能保证两个
items()
方法都会以相同的顺序返回键,即使在某些实现中可以这样做。例如,如果您从第二个dict中删除
3:5
部分,则尝试应用此方法,您将得到错误的结果。我可能同意,但如果您有用户建议的词典,则这不是问题。他没有提供更多信息,因此不需要更通用的解决方案。还要注意的是,如果两个字典之间没有公共键/值对,它将返回一个错误。是的。。。其他所有人也一样solutions@spadarian除了我刚刚发布的:它处理这种情况没有错误。我喜欢元组排序的良好使用it@Adirio干杯我也喜欢你的解决方案,简洁明了:)。请注意,如果两个字典之间没有公共键/值对,它将返回一个错误。@LaurentH。错误是你的朋友,处理它们以避免程序崩溃,但不要试图避免它们。使用一个简单的
try:。。。除了ValueError:…
在这一行附近,您将知道何时没有匹配的密钥,并正确处理这种情况。我完全同意您的解决方案和解释,现在您已经添加了如何处理“没有公共密钥/值对”的情况。感谢您的完成。您正在考虑打印
None
是一种有效的错误处理机制,但这可能不适用于他的用例,我们没有足够的信息是的,这是我的选择。但与其他发布的解决方案不同(当然,在我发布此评论时),我已经明确展示了如何处理此案例。
a = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7}
b = {0:0, 1:7, 2:6, 3:5, 4:4, 5:3, 6:2, 7:1}

# Initialize the result (output)
result = None

# Get the common keys between the 2 dictionaries
commonKeys = [k for k in a.keys() if k in b.keys()]

# Loop on these common keys
for k in commonKeys:
    # Update result:
    # - if the value is identical between the 2 dictionaries
    # - and if current result is lower than this value
    if a[k] == b[k]:
        if ((result == None) or (result < a[k])):
            result = a[k]

# Display result value ("None" if not found)
print(result)