我有这个字典列表的字典:
dict_countries ={'uk': [{'datetime': '1955-10-10 17:00:00', 'city': 'chester'},{'datetime': '1956-09-10 13:00:00', 'city': 'london'}],'us': [{'datetime': '1974-10-10 23:00:00', 'city': 'hudson'}]}
到目前为止,我已经写了这个函数(我不能使用元组)。该函数必须返回一个字典,其中Key是拥有最多景点(其列表中的字典)的国家的名称,值是景点的数量:
def country_with_most_sights(dict_countries:dict)-> dict:
record_dict = {}
for country in dict_countries
N_sights = len(each_country)
if N_sights > record_dict[past_country]:
past_country = ***country´s name***
record_dict[past_country] = N_sights
return record_dict
期望的结果将是record_dict为:
record_dict = {uk:2}
有很多方法可以做到这一点。以下是一些:
-
查找每个值的长度,然后使用
max
和key
参数查找长度最长的项。def country_with_most_sights(dict_countries:dict)-> dict: return dict([max(((k, len(v)) for k, v in dict_countries.items()), key=lambda x: x[1])])
解释:
- 在字典中查找
items()
的max()
dict.items()
的每个元素都是包含键和值的元组。- 我们使用生成器表达式
((k, len(v)) for k, v in dict_countries.items())
将其转换为包含键和值长度的元组 - 通过指定lambda函数,我们使用该元组的第二个元素(即值的长度)作为查找最大值的标准。
- 在字典中查找
-
只使用字典的
.keys()
,并在lambda中使用此键索引到原始字典。def country_with_most_sights(dict_countries:dict)-> dict: max_key = max(dict_countries.keys(), key=lambda k: len(dict_countries[k])) max_val = len(dict_countries[k]) return {max_key: max_val}
-
遍历字典的键并跟踪最长的值。然后返回该键及其长度:
def country_with_most_sights(dict_countries:dict)-> dict: longest_country = "none" num_sights = 0 for k, v in dict_countries.items(): if len(v) > num_sights: longest_country = k num_sights = len(v) return {longest_country: num_sights}
解释:
- 遍历
dict.items()
- 如果值的长度比你以前看到的任何东西都要长,将键和值保存在
longest_country
和num_sights
变量中。 - 当你用完字典中的所有条目后,从你的变量中创建返回值并返回。
- 遍历
dict_countries = {'uk': [{'datetime': '1955-10-10 17:00:00', 'city': 'chester'},
{'datetime': '1956-09-10 13:00:00', 'city': 'london'}],
'us': [{'datetime': '1974-10-10 23:00:00', 'city': 'hudson'}]}
val = 0
k = ''
for key in dict_countries.keys():
qqq = len(dict_countries[key])
if qqq > val:
val = qqq
k = key
ttt = {k: val}
输出{'uk': 2}
通过变量'val'更新列表的最大大小。