Python 带有Dicts remove‚;副本‘;
我有一个包含cookie信息的dict数组。 例如: 问题是,我有一些重复的,它是相同的饼干,但它有不同的到期日。 示例:有两个具有不同到期日期的Python 带有Dicts remove‚;副本‘;,python,Python,我有一个包含cookie信息的dict数组。 例如: 问题是,我有一些重复的,它是相同的饼干,但它有不同的到期日。 示例:有两个具有不同到期日期的\u gid和\u gacookie 我的目标是创建一个只包含每个cookie一次的结果数组,通过只添加一次每个键/值“name”来删除重复项 def cookie\u删除重复项(数组): #结果数组 结果_数组=[] #通过阵列 对于范围(0,len(数组))中的i: #获取键“name”的值 tmp\u value\u unsorted=array
\u gid
和\u ga
cookie
我的目标是创建一个只包含每个cookie一次的结果数组,通过只添加一次每个键/值“name”来删除重复项
def cookie\u删除重复项(数组):
#结果数组
结果_数组=[]
#通过阵列
对于范围(0,len(数组))中的i:
#获取键“name”的值
tmp\u value\u unsorted=array[i].get('name')
如果(len(结果数组)==0):
结果\u array.append(数组[i])
#通过结果数组
对于范围(0,len(结果数组))中的y:
tmp\u value\u sorted=result\u数组[y]。获取('name'))
#如果值不相同,则添加到结果数组
如果(tmp_值_排序!=tmp_值_未排序):
结果\u array.append(数组[i])
该函数以无休止的循环结束。我不知道我做错了,希望你能帮助我
提前感谢,,
Andi您可以在一行中完成这一点:
def remove_cookie_duplicates(cookies):
return list({i["name"]: i for i in cookies}.values())
崩溃
这部分是一个dict理解词典,名称作为键,cookie本身作为值。字典的一个副作用是每个键只能出现一次。因此,此转换会自动丢弃具有相同名称的任何元素
接下来,我做
.values()
,它丢弃密钥,只留下cookie本身。这将返回一个迭代器,因此我们使用list()
将其最终转换回列表。您可以在一行中完成此操作:
def remove_cookie_duplicates(cookies):
return list({i["name"]: i for i in cookies}.values())
崩溃
这部分是一个dict理解词典,名称作为键,cookie本身作为值。字典的一个副作用是每个键只能出现一次。因此,此转换会自动丢弃具有相同名称的任何元素
接下来,我做
.values()
,它丢弃密钥,只留下cookie本身。这将返回一个迭代器,因此我们使用list()
将其最终转换回列表。使用unique\u everseed()
函数,您可以更快、更清晰地完成这项工作。这基本上是:
列出唯一的元素,保持顺序。记住所有见过的元素
要使用它,您应该安装Python的itertools扩展:
pip install more-itertools
然后这行代码将以几乎C的速度完全完成您刚才描述的内容
from more_itertools import unique_everseen
unqie_cookies = unique_everseen(cookies_array, key=lambda c: c['name'])
注:
unique\u everseed()
将返回一个生成器如果您想将其转换为列表,只需使用list(unqie\u cookies)
哦,我刚刚注意到,您只需要cookie名称。使用
unique\u everseed()
函数,您可以更快、更干净地完成这项工作。这基本上是:
列出唯一的元素,保持顺序。记住所有见过的元素
要使用它,您应该安装Python的itertools扩展:
pip install more-itertools
然后这行代码将以几乎C的速度完全完成您刚才描述的内容
from more_itertools import unique_everseen
unqie_cookies = unique_everseen(cookies_array, key=lambda c: c['name'])
注:
unique\u everseed()
将返回一个生成器如果您想将其转换为列表,只需使用list(unqie\u cookies)
哦,我刚刚注意到您只需要cookie名称。与您的问题没有直接关系,但您通常应该使用
enumerate()
,而不是range(len())
更仔细地查看您的代码,似乎您正在为每个不匹配的值重新添加每个新值。仅当没有匹配项时才要添加它。现在,如果有两个cookie,则每个新值添加两次。这与您的问题没有直接关系,但您通常应该使用enumerate()
,而不是range(len())
更仔细地查看您的代码,似乎您正在为每个不匹配的值重新添加每个新值。仅当没有匹配项时才要添加它。现在,如果有两个cookies,你可以为每个cookies添加两次新值。哦,我的天啊,非常感谢你,它正在工作!!!谢谢你能解释一下这个函数的作用吗?我很想了解这一行中发生了什么,效果非常好:)我补充了一些解释非常感谢你,这太棒了!哦,我的天啊,非常感谢你,它正在工作!!!谢谢你能解释一下这个函数的作用吗?我很想了解这一行中发生了什么,效果非常好:)我补充了一些解释非常感谢你,这太棒了!