我使用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的建议将不胜感激
答案 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})