gpt4 book ai didi

python - 在字典值上运行函数而不丢失与键的关联的更简单的方法?

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

我想对字典中的所有值运行一个函数。使事情变得更复杂的是,每个值经历的确切转换不是独立的,而是取决于其他值在经历之前的转换。这是一个在列表上定义的简单函数,用于说明我的意思:

def new_list_generator(mylist):
number_of_iterations = 0
new_list = []
for n in mylist:
if number_of_iterations%2 == 0:
new_list.append(n**1.25)
number_of_iterations += 1
else:
new_list.append(n**0.5)
number_of_iterations += 1
return new_list

您可以看到,我们对每个值使用的权力取决于历史记录 - 在它之前修改了多少个值。

现在,这就是为列表定义的函数。当我想要修改字典的值而不取消键和值的关联时会发生什么(也就是说,我不想简单地创建所有值的列表并将该列表提供给函数)?

我能想到(并使其发挥作用)的最佳解决方案是以下繁琐的解决方案:

第 1 步:将字典转换为元组列表。即 [(value1,key1), (value2,key2),...]

第 2 步:在该列表上运行修改后的函数。

第 3 步:使用 dict() 将列表转换回字典。

即:

some_dict = {"Graham": 13, "Eric": 19, "Terry G": 7, "Terry J":11, "John": 15, "Michael": 7}

dict_to_tuples = some_dict.items()

def new_list_generator1(mylist): # notice it's a new function
number_of_iterations = 0
new_list = []
for n in mylist:
if number_of_iterations%2 == 0:
new_list.append((n[0],n[1]**1.25)) # <== new
number_of_iterations += 1
else:
new_list.append((n[0],n[1]**0.5)) # <== new
number_of_iterations += 1
return new_list

tups = new_list_generator1(dict_to_tuples)

print dict(tups)

我想知道是否有一种不太麻烦的方法可以做到这一点,希望不必修改原始列表。我用谷歌搜索了一下,在 Stackoverflow 或其他地方找不到任何信息(字典值使用的函数取决于历史记录)。

感谢您的帮助。

最佳答案

只需循环键并直接修改值即可。

some_dict = {"Graham": 13, "Eric": 19, "Terry G": 7, "Terry J":11, "John": 15, "Michael": 7}


def new_list_generator1(mydict): # notice it's a new function
number_of_iterations = 0
for key in mydict:
if number_of_iterations%2 == 0:
mydict[key] = mydict[key]**1.25
else:
mydict[key] = mydict[key]**0.5
number_of_iterations += 1
return mydict

print new_list_generator1(some_dict)
<小时/>

正如 @kroolik 在下面正确指出的那样,至少对于当前示例来说,可以使用enumerate进一步简化。

def new_list_generator1(mydict):      # notice it's a new function
for i, key in enumerate(mydict):
if i%2 == 0: mydict[key] = mydict[key]**1.25
else: mydict[key] = mydict[key]**0.5
return mydict

关于python - 在字典值上运行函数而不丢失与键的关联的更简单的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24606531/

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