如何从python dicts列表中创建范围?

时间:2015-10-03 04:25:13

标签: python excel dictionary

我使用openpyxl来评估工作表。 此工作表上有一行包含合并单元格中的column_group名称。 我创建了一个dicts列表,其中column_group是键,列号是值

adb shell "su -c 'ls -R / | grep /'"

现在我想使用col_groups创建group_name :( start_column:end_column)字典

这是我能够得到的最接近的。

col_groups= [{u'Layer': 1}, {u'Single Ended': 17},\
             {u'Single Ended': 22}, {u'Edge Coupled': 27}]

在python shell提示符下输入group_cols给出:

[{u' Layer':(1,16)},{u' Single Ended':(17,21)},{u' Single Ended': (22,26)},{u' Edge Coupled':(27,33)}]

输出看起来不错,但我的方法感觉有点hackish-任何更多pythonic的建议将不胜感激

2 个答案:

答案 0 :(得分:1)

字典是错误的结构,元组(名称,idx)会更好,但是你可以使用它。

# define a sort key (Python 3 compatible)
def sort_key(value):
    "Sort by the value"
    return list(value.values())[-1]

ordered_groups = []
max_column = 34
for group in sorted(col_groups, key=sort_key, reverse=True):
    key, begin = list(group.items())[0]
    end = max_column - 1
    max_column = begin
    ordered_groups.append((key, (begin, end)))
dict(ordered_groups)

答案 1 :(得分:0)

你的try语句失败的唯一时间,就是当你在列表的末尾,并试图访问最后一个元素之后的元素。在这种情况下,使用if语句可能更好。

col_groups = [{u'Layer': 1}, {u'Single Ended': 17},
              {u'Single Ended': 22}, {u'Edge Coupled': 27}]

group_cols = []
for i in range(col_groups):
    key = col_groups[i].keys()[0]
    first_val = col_groups[i].values()[0]
    if i != len(col_groups) - 1:
        second_val = col_groups[i + 1].values()[0] - 1
    else:
        second_val = tap_sh.max_column
    values = (first_val, second_val)
    group_cols.append({key: values})