假设:
dict_top = "trialdata[0]"
top_keys = ['offset', 'latitude', 'longitude']
我想要的结果是: trialdata [0] [' offset']#将在调用时作为字典查找运行
我的代码:
call_key_line = "".join([dict_top, "[\'", top_keys[0], "\']"])
print(call_key_line)
print(trialdata[0]['offset'])
返回:
trialdata[0]['offset']
-6
-6是正确的值,但是我如何编码call_key_line以使它充当字典查找?现在打印call_key_line只打印出一个字符串。我怀疑是因为call_key_line中的0是一个字符串,而不是一个整数。但如果我尝试用
更改它call_key_line[10] = 0
我得到TypeError:' str'对象不支持项目分配
有没有办法在程序中编写字典查找(而不是硬编码)?我有几个键和dicts,我想循环遍历它们并收集它们的值。
答案 0 :(得分:1)
答案不是将代码生成为字符串。
抽象您要执行的操作并将它们封装在函数中。例如,要获得“偏移量”:
def get_offset(d):
return d['offset']
然后你可以用你的每个词典来调用它:
print( get_offset( trialdata[0] ) )
for d in trialdata:
print( get_offset(d) )
或者如果您想对每个键执行相同的操作:
top_keys = ['offset', 'latitude', 'longitutde']
def print_values(d):
for key in top_keys:
print( d[key] )
def change_all_values(d):
for key in top_keys:
d[key] = "Hello World"
for d in trialdata:
print_values(d)
change_all_values(d)
您可能需要考虑使用classes而不是字典,以便封装您将对每个字典执行的操作。
class MyData:
def __init__(self, offset, lat, long):
self.offset = offset
self.latitude = lat
self.longitutde = long
def print_offset(self):
print( self.offset )
def change_offset(self, val):
self.offset = val
def __str__(self):
return "offset: %s, coordinates: (%d, %d)" % (
self.offset, self.latitude, self.longitutde)
答案 1 :(得分:0)
基于你的pastbin评论:
for dict_x in [dict_top, dict_daily, dict_current]:
for i in data_list:
for k in top_keys:
if k in dict_x:
continue
else:
dict_x[k] = -9999
你在i
做什么?这似乎无关紧要。
dict_top
,dict_daily
或dict_current
中的一个是字符串而不是字典吗?看起来他们可能都是字符串?您是否尝试删除有关其定义的引号?
第47行也是可疑的(可能是复制粘贴错误):
dict_dailthis_dicy = "data_list[i]['daily']['data'][0]"
答案 2 :(得分:0)
再次感谢所有评论的人。我找到的答案是.get()方法。我是通过Reddit论坛(https://www.reddit.com/r/learnpython/comments/3l2sgq/how_do_i_programatically_compose_a_dictionary_key/)
导演的我沿着我需要从dict中检索值的路径,然后检查结果,如果我没有找到该特定键,则插入替换值。
使用dict.get(key,default_value)完成我正在尝试的操作 - 在找不到给定键时插入默认值。