如何以编程方式组成字典键值

时间:2015-09-15 17:35:41

标签: python dictionary

假设:

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,我想循环遍历它们并收集它们的值。

3 个答案:

答案 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_topdict_dailydict_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)完成我正在尝试的操作 - 在找不到给定键时插入默认值。