Python 2.7
这是Python: get key with the least value from a dictionary BUT multiple minimum values
的变体我的字典看起来像这样:
dates = {
'first record': {
'first date': '1985',
'last date': '2000',
},
'second record': {
'first date': '1985',
'last date': '2012',
},
'third record': {
'first date': '1985',
'last date': '2000',
},
'fourth record': {
'first date': '2000',
'last date': '2014',
}
}
我正在尝试检索最旧记录的密钥,其中最旧的记录表示最早的第一个日期和最早的最后日期。在上面的例子中,'第一个记录'和第三个记录'都会被退回。
我很难找到如何使用在类似(但不太复杂)的问题的答案中描述的itervalues / iteritems方法来实现解决方案。有人可以提供一些指导吗?
答案 0 :(得分:0)
您只需要按键:
mn_year = min((int(d['first date']), int(d['last date'])) for d in dates.values())
print(mn_year)
print([k for k in dates
if (int(dates[k]['first date']), int(dates[k]['last date'])) == mn_year])
(1985, 2000)
['third record', 'first record']
如果值不相关,则需要分别计算min:
dates = {
'first record': {
'first date': '1984',
'last date': '2001',
},
'second record': {
'first date': '1985',
'last date': '2012',
},
'third record': {
'first date': '1985',
'last date': '2000',
},
'fourth record': {
'first date': '2000',
'last date': '2014',
}
}
mn_first = min((int(d['first date'])) for d in dates.values())
mn_last = min((int(d['last date'])) for d in dates.values())
print([k for k,v in dates.iteritems()
if int(v['first date']) == mn_first or int(v['last date']) == mn_last])
使用第一个代码返回['third record', 'first record']
而不是['first record']
。
获取元组的最小值不会获得每个键的最小值,而是获得配对元组的最小值,因此任何唯一的first date
都不一定与最小last date
配对,除非min {{{ 1}}碰巧在同一个字典中。
而不是循环两次以获得最小值,我们可以使用循环同时获得两者:
last date