如何从python dict列表创建范围?

2024-06-13 11:00:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用openpyxl评估工作表。 此工作表中有一行包含合并单元格中的列组名。 我创建了一个dict列表,其中column\u group是键,column number是值

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

现在我想创建一个组名:(start)_列:结束列)使用列组的词典

这是我能得到的最接近的。你知道吗

group_cols = []
for x, d in enumerate(col_groups):
    try:
        group_cols.append({col_groups[x].keys()[0]:(col_groups[x].values()[0],(col_groups[(x+1)].values()[0] - 1))})
    except:
        group_cols.append({col_groups[x].keys()[0]:(col_groups[x].values()[0],tap_sh.max_column)})

在python shell提示符处键入group\u cols可以得到:

[{u'层':(1,16)},{u'单端':(17,21)},{u'单端':(22,26)},{u'边耦合':(27,33)}]

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


Tags: number列表groupcolumncolkeysdictgroups
2条回答

字典是错误的结构,元组(name,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)

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})

相关问题 更多 >