在python字典中存储格式

时间:2012-01-18 22:06:08

标签: python django

希望我没有错过任何明显的东西......

我正在创建一个函数,可以轻松地从Django查询创建特定格式的JSON数据。但是,这应该是一个纯粹的蟒蛇问题。

我希望能够将具有给定索引的所有值转换为指定格式,并使用如下函数:

data = [['foo1','bar1'],['foo2','bar2']]
format = {1:'VALUE says Hello world'}

>> some_function(data, format) 
[['foo1','bar1 says Hello World'],['foo2','bar2 says Hello World']]

基本理念:

def some_function(data, format):
    for row in data:
        for count, value in enumerate(row):
            if format.has_key(count):
                #do something to replace 'VALUE' with value
            else:
                #just use value, no changes
    return formatted_data

这个问题的根源是数据直接进入网络,我想根据我通过泛型函数的内容定义特定的格式。

为清晰起见编辑:

我应该向some_function()添加什么才能将数据列表中的相应值转换为格式字典定义的格式?

3 个答案:

答案 0 :(得分:3)

def some_function(data, format):
    result = []
    for row in data:
        lst = []
        for count, value in enumerate(row):
            if count in format:
                string = format[count].format(value)
                lst.append(string)
            else:
                lst.append(value)
        result.append(lst)
    return result


data = [['foo1', 'bar1'], ['foo2', 'bar2']]
format = {1: '{0} says Hello world'}
print(some_function(data, format))
# prints: [['foo1', 'bar1 says Hello world'], ['foo2', 'bar2 says Hello world']]

您可以使用的格式在docs

中说明

答案 1 :(得分:1)

我建议用{1:'%s says Hello world'}替换格式。 然后你可以:

def some_function(data, format):
    formatted_data = []
    for row in data:
        r = []
        for count, value in enumerate(row):
            if count in format:
                value = format[count] % value

            r.append(value)

        formatted_data.append(r)

    return formatted_data

虽然有更优雅的方法来完成任务。

答案 2 :(得分:1)

我们希望通过转换每一行中的每个单元格来产生数据,其中"转换"通过查找单元格"列ID"来定义。 (我们可以使用enumerate将ID与单元格内容进行匹配)我们的格式"字典并应用相应的字符串格式化程序。如果没有应用格式,我们只想使用原始值;我们可以通过使用"默认"来处理它。具有该结果的格式。

拼写错误:

def transform(data, formats):
    return [
        [
            formats.get(i, '{0}').format(column)
            for i, column in enumerate(row)
        ]
        for row in data
    ]

transform([['foo1','bar1'],['foo2','bar2']], {1:'{0} says Hello world'})
相关问题