|
@@ -62,32 +62,26 @@ class Material():
|
|
|
# 将 JSON 字符串列表转为字典对象列表
|
|
|
data = [json.loads(item) for item in data]
|
|
|
|
|
|
- # 根据 keyword_name 和 channel_id 进行分组
|
|
|
+ # 根据 channel_id 和 keyword_name 进行分组
|
|
|
groups = defaultdict(lambda: defaultdict(list))
|
|
|
for item in data:
|
|
|
- groups[item['keyword_name']][item['channel_id']].append(item)
|
|
|
+ groups[item['channel_id']][item['keyword_name']].append(item)
|
|
|
|
|
|
- # 获取所有唯一的 keyword_name 并创建一个轮流顺序
|
|
|
- unique_names = list(groups.keys())
|
|
|
- priority_names = [name for name in unique_names if name in unique_names]
|
|
|
- remaining_names = [name for name in unique_names if name not in priority_names]
|
|
|
+ # 获取所有唯一的 channel_id 并创建一个轮流顺序
|
|
|
+ unique_channel_ids = list(groups.keys())
|
|
|
|
|
|
- # 将 priority_names 列表进行轮流排序,同时对 channel_id 进行轮流排序
|
|
|
result = []
|
|
|
- max_length = max(len(groups[name][channel]) for name in priority_names for channel in groups[name])
|
|
|
|
|
|
- for i in range(max_length):
|
|
|
- for name in priority_names:
|
|
|
- channels = list(groups[name].keys())
|
|
|
- channel_index = i % len(channels) # 依次循环不同的 channel_id
|
|
|
- channel = channels[channel_index]
|
|
|
- if i < len(groups[name][channel]):
|
|
|
- result.append(groups[name][channel][i])
|
|
|
+ # 依次循环不同的 channel_id
|
|
|
+ max_length = max(len(groups[channel][keyword]) for channel in unique_channel_ids for keyword in groups[channel])
|
|
|
|
|
|
- # 将未列入优先顺序的其余数据添加到结果中
|
|
|
- for name in remaining_names:
|
|
|
- for channel in groups[name]:
|
|
|
- result.extend(groups[name][channel])
|
|
|
+ for i in range(max_length):
|
|
|
+ for channel in unique_channel_ids:
|
|
|
+ keywords = list(groups[channel].keys())
|
|
|
+ keyword_index = i % len(keywords) # 依次循环不同的 keyword_name
|
|
|
+ keyword = keywords[keyword_index]
|
|
|
+ if i < len(groups[channel][keyword]):
|
|
|
+ result.append(groups[channel][keyword][i])
|
|
|
|
|
|
# 将结果转回 JSON 字符串列表
|
|
|
sorted_list = [json.dumps(item, ensure_ascii=False) for item in result]
|