Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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 带有Dicts remove‚;副本‘;_Python - Fatal编程技术网

Python 带有Dicts remove‚;副本‘;

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

我有一个包含cookie信息的dict数组。 例如:

问题是,我有一些重复的,它是相同的饼干,但它有不同的到期日。 示例:有两个具有不同到期日期的
\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添加两次新值。哦,我的天啊,非常感谢你,它正在工作!!!谢谢你能解释一下这个函数的作用吗?我很想了解这一行中发生了什么,效果非常好:)我补充了一些解释非常感谢你,这太棒了!哦,我的天啊,非常感谢你,它正在工作!!!谢谢你能解释一下这个函数的作用吗?我很想了解这一行中发生了什么,效果非常好:)我补充了一些解释非常感谢你,这太棒了!