如何解决Python:根据文本长度更新dict中的值的快速方法吗?
我有一组类似的集合。我基本上想将其转换为字典并解决重复键,我想获取长度较长的文本值:
[('hong kong','state'),('hong kong','city'),('hong','country'),('kong','country')]
因此,期望的结果将是:
{'state': 'hong kong','city': 'hong kong','country': 'hong kong'}
我有一个函数可以做到这一点,但是我敢肯定,有一种更好,更高效,更Python化的方法可以做到这一点。这是我所做的:
def create_dict(l):
d=defaultdict(list)
for s in l:
key = s[1]
val = s[0]
if d[key]:
if len(val) > len(d[key]):
d[key] = val
else:
d[key] = val
return d
解决方法
下面是如何通过自定义键使用sorted
方法:
lst = [('hong kong','state'),('hong kong','city'),('hong','country'),('kong','country')]
def create_dict(l):
sorted_lst = sorted(l,key=lambda x: len(x[0]))
return {k: v for v,k in sorted_lst}
print(create_dict(lst))
输出:
{'country': 'hong kong','city': 'hong kong','state': 'hong kong'}
,
这怎么样?
lst = [('hong kong','country')]
output = {}
for value,key in lst:
if len(output.setdefault(key,value)) < len(value):
output[key] = value
,
@Ann Zen上方的排序方法更为简洁,因为您不必从集合中导入defaultdict,但这是原始代码的Pythonic版本:
def create_dict(l)
d = defaultdict(list)
for value,k in l:
d[k].append(value)
return {k: max(d[k],key=len) for k in d.keys()}
这里,我们将传递的列表中的每个元组解压缩为value,k
,以构建defaultdict(list)
,而不是按索引进行显式分配。然后,与其使用循环在每个列表中找到最长的字符串,然后在if / else语句中构建字典,不如使用max()
函数拉出最长的字符串,键入字符串长度,然后将其包装起来全部包含在直接返回的字典生成器表达式中。返回:
{'state': 'hong kong','country': 'hong kong'}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。