主要原因就是参照方案使用lua处理,对同一个table遍历顺序是不稳定的,即table中存在 A B C 元素,可能这次遍历顺序是 A-B-C,下次遍历顺序可能就是 B-A-C;稳定性得不到保证。
lua的官网对于table的遍历描述一直是:
The order in which the indices are enumerated is not specified, even for numeric indices. (To traverse a table in numeric order, use a numerical for or the ipairs function.)
deep1 = count_dict_deep(dict1) ans = deep1 + 1/times1
return ans
defcount_table_frequency(unit_dict, dict_frequency): """Count table frequency Count table frequency and record as {table string: times} Args: unit_dict: dict, need analyse data dict_frequency: dict, the record's set """
unit_str = str(unit_dict) if unit_str in dict_frequency: dict_frequency[unit_str] = dict_frequency[unit_str] + 1 else: dict_frequency[unit_str] = 1
# traversing sub dict for item in unit_dict.values(): if isinstance(item, dict): count_table_frequency(item, dict_frequency)
defcount_table_value_frequency(key, value, item_frequency): """Count table value frequency Count every excel column element appear times. Record as { key1 : {element1 : times, element2: times, ...} key2 : {element1 : times, element2: times, ...} ... } Args: key: string value: string or dict item_frequency: dict, the record's set """
if isinstance(value, dict): value = str(value)
if key in item_frequency.keys(): if value in item_frequency[key].keys(): item_frequency[key][value] = item_frequency[key][value] + 1 else: item_frequency[key][value] = 1 else: item_frequency[key] = {} item_frequency[key][value] = 1
for key in sorted(excel_dict): if isinstance(excel_dict[key], dict): count_table_frequency(excel_dict[key], dict_frequency)
for k, v in excel_dict[key].items(): count_table_value_frequency(k, v, item_frequency)
defcheck_repeat_dict(item_dict, repeat_dict): """Check repeat dict Check repeat dict and return the repeat index, if not exist in repeat dict return -1. Args: item_dict: dict repeat_dict: dict Returns: int """
dict_str = str(item_dict) if dict_str in repeat_dict.keys(): return repeat_dict[dict_str] else: return-1
defreplace_repeat_dict(item_dict, repeat_dict, cur_index = -1): """Replace repeat dict Check if element exist in repeat dict and replace by designation string. Args: item_dict: dict repeat_dict: dict """
cur_index = -1
for key, value in item_dict.items(): if isinstance(value, dict): index = check_repeat_dict(value, repeat_dict) if index != -1and (index < cur_index or cur_index == -1): if index > 190: item_dict[key] = REPEAT_KEY_PREFIX + '[' + str(index - LOCAL_TABLE_MAX) + ']' else: item_dict[key] = REPEAT_KEY_PREFIX + str(index) else: replace_repeat_dict(value, repeat_dict, cur_index)