0

我有一个字符串列表,我希望列表中的每个字符串都将其存储在字典中并将其发送到另一个函数。到目前为止,它看起来像这样:

list = ['75001', '75002', '75003']
params = {}
for elt in list:
    params['elt'] = elt
    ...
    foo(params)

但问题是我存储的是对 elt 的引用而不是值,所以在我的函数调用中,我总是有列表的最后一个元素:

params['elt'] = '75003'

我怎么能只存储价值而不是参考?

4

4 回答 4

2
list = ['75001', '75002', '75003']
params = {}
for elt in list:
    params[elt] = elt
    ...
    foo(params)

只需删除elt. params['elt']您当前正在做的是反复更改 key 的值'elt'

如果您每次都想要一本新字典,但是您可以这样做:

list = ['75001', '75002', '75003']
for elt in list:
    foo({'elt': elt})
于 2012-09-19T14:51:55.653 回答
2

问题是所有函数都得到相同的字典。试试这个:

list = ['75001', '75002', '75003']
for elt in list:
    params = {}
    params['elt'] = elt
    ...
    foo(params)

现在每次调用foo()都会获得一个新容器,他们再也看不到对方了。

于 2012-09-19T14:53:22.890 回答
2

如果您想要一个在将其传递给 foo 后不会更改的 dict,则应该复制该 dict:

params = {}
for elt in list:
    params['elt'] = elt
    ...
    foo(params.copy())

现在,对循环后面的进一步更改params不会影响params您发送到的副本foo

这与 Aaron Digulla 的回答不同,因为params最初仍然可以在循环之外创建。如果 params 在代码中声明得很远,并且您不想将其移入循环中,这将很有用;或者如果初始实例化很昂贵并且您不想多次执行。

于 2012-09-19T15:02:05.677 回答
1

我想你想要这样的东西:

zip_codes = ['75001', '75002', '75003']
for zip_code in zip_codes:
    params = {}
    params['zip code'] = zip_code
    ...
    foo(params)

每次通过循环都会创建一个新的空字典,并在调用之前将列表中的值添加到它,foo()尽管您实际上并不需要它,除非您确定每次通过循环都分配给相同的键。另一种方法是将其移出循环并在循环params.clear()顶部调用。当然,在调用之前可以根据需要添加其他键和相应的搜索信息foo()

于 2012-09-19T15:06:24.910 回答