gpt4 book ai didi

python - 在python中使用 map 不一致

转载 作者:太空宇宙 更新时间:2023-11-03 15:53:21 25 4
gpt4 key购买 nike

我有一个常量文件constants.py,如下所示:

querystring = {
"limit":"10000",
"sort":"desc"
}

dummy1 = {
"a": "22",
"q": "*",
}

dummy2 = {
"a": "24",
"q": "**",
}

streams = [dummy1, dummy2]

我正在尝试通过操作 constants.py 文件中的值来初始化列表。

from constants import querystring, streams
def setParams(dummy, querystring):
ld = {}
ld["query"] = setQuerystring( dummy, querystring)
print ld
return ld

def setQuerystring( dummy, querystring):
query = querystring
query["filter"] = "stream:" + dummy["a"]
query["query"] = dummy["q"]
return query

l = map(lambda x: setParams(x, querystring), streams)
print l[0]
print l[1]

虽然 lambda 函数正在运行,但输出已正确打印,但当我看到 map 返回的最终值时,这些值是不同的。为什么会出现这种不一致?

程序输出:

{'query': {'sort': 'desc', 'filter': 'stream:22', 'limit': '10000', 'query': '*'}} # l[0] -> during lambda execution
{'query': {'sort': 'desc', 'filter': 'stream:24', 'limit': '10000', 'query': '**'}} # l[1] -> during lambda execution
{'query': {'sort': 'desc', 'filter': 'stream:24', 'limit': '10000', 'query': '**'}} # l[0] -> from map
{'query': {'sort': 'desc', 'filter': 'stream:24', 'limit': '10000', 'query': '**'}} # l[1] -> from map

最佳答案

您正在跨迭代重用和修改 querystring 字典。因此,来自连续迭代的后续更改会传播到先前附加的副本。您应该考虑将副本附加到每个字典,然后修改该副本:

def setQuerystring( dummy, querystring):
query = querystring.copy()
...

{'query': {'sort': 'desc', 'filter': 'stream:22', 'limit': '10000', 'query': '*'}}
{'query': {'sort': 'desc', 'filter': 'stream:24', 'limit': '10000', 'query': '**'}}
{'query': {'sort': 'desc', 'filter': 'stream:22', 'limit': '10000', 'query': '*'}}
{'query': {'sort': 'desc', 'filter': 'stream:24', 'limit': '10000', 'query': '**'}}

关于python - 在python中使用 map 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45146169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com