我需要将数组拆分为 python 中相似值的子数组
I need to split array to sub arrays of similar values in python
假设我有这个 queryset_array
:
queryset_array = [{"category":"a"},{"category":"a"},{"category:"b"},{"category":"b"},{"category":"c"},{"category":"c"}]
如何使用最有效的 pythonic 方式将此数组转换为:
array_1 = [{"category":"a"},{"category":a"}}]
array_2 = [{"category":"b"},{"category":"b"}]
array_3 = [{"category":"c"},{"category":"c"}]
首先,你的字典是无效的
我猜你忘记了 {"category: "b"}
处的引号,它看起来像这样:
[{"category":"a"},{"category":"a"},{"category":"b"},{"category":"b"},{"category":"c"}, {"category":"c"}]
其次,要完全按照您的要求进行操作,您可以这样做:
array_1 = (queryset_array[1], queryset_array[2])
array_2 = (queryset_array[3], queryset_array[4])
array_3 = (queryset_array[5], queryset_array[6])
但这仅在您的 queryset_array
恰好包含 6 个值时有效。
如果你想让你的代码更通用一点,你可以使用这个:
queryset_array = [{"category":"a"},{"category":"a"},{"category":"b"},{"category":"b"},{"category":"c"}, {"category":"c"}]
queryset_array2 = []
for x in range(len(queryset_array)):
if x % 2 == 0:
queryset_array2.append([queryset_array[x], queryset_array[x+1]])
或者如果输入数据不是这样组织的:
queryset_array = [{"category": "b"},{"category": "a"},{"category": "b"},{"category": "b"},{"category": "c"},{"category": "d"}]
queryset_array2 = {}
for item in queryset_array:
if item["category"] not in queryset_array2.keys():
queryset_array2[item["category"]] = []
queryset_array2[item["category"]].append(item)
试试这个:
from itertools import groupby
queryset_array = [{"category": "b"}, {"category": "a"}, {"category": "b"}, {"category": "b"}, {"category": "c"},
{"category": "d"}]
def key_func(k):
return k['category']
sorted_data = sorted(queryset_array, key=key_func)
count = 1
for key, value in groupby(sorted_data , key_func):
print(f'array_{count}= {list(value)}')
count += 1
输出
array_1= [{'category': 'a'}]
array_2= [{'category': 'b'}, {'category': 'b'}, {'category': 'b'}]
array_3= [{'category': 'c'}]
array_4= [{'category': 'd'}]
不使用任何库见下面的另一个回复。我已经更改了 queryset_array
以查看它是否正常工作。我还创建了一个字典 desired_dictionary
,它由 array_x
个键组成。
queryset_array = [{"category":"a"}, {"category":"a"},{"category":"a"}, {"category":"a"},{"category":"b"},{"category":"b"},{"category":"c"},{"category":"a"}, {"category":"b"}, {"category":"c"}, {"category":"c"},{"category":"b"},{"category":"c"}, {"category":"d"}]
def my_fnc(k):
return k['category']
sorted_queryset_array = sorted(queryset_array, key=my_fnc)
j = 1
values_dictionary = {}
desired_dictionary = {}
for i in sorted_queryset_array: # creating values_dictionary which includes values and how many times encountered.
for k,v in i.items():
val = f"value_{v}"
if val in values_dictionary:
j = j + 1
values_dictionary[val] = j
if val not in values_dictionary:
values_dictionary[val] = 1
j = 1
w = 1
desired_list = []
for k,v in values_dictionary.items():
values = k.split("_")
variable = f"array_{w}"
for p in range(0,v):
desired_list.append({"category": values[1]}) # This list desired_list is the desired data.
desired_dictionary[variable] = desired_list # Creating a dict with array_x values.
desired_list = []
w = w + 1
print(desired_dictionary)
# for k,v in desired_dictionary.items():
# print(v)
查看以下输出:
假设我有这个 queryset_array
:
queryset_array = [{"category":"a"},{"category":"a"},{"category:"b"},{"category":"b"},{"category":"c"},{"category":"c"}]
如何使用最有效的 pythonic 方式将此数组转换为:
array_1 = [{"category":"a"},{"category":a"}}]
array_2 = [{"category":"b"},{"category":"b"}]
array_3 = [{"category":"c"},{"category":"c"}]
首先,你的字典是无效的
我猜你忘记了 {"category: "b"}
处的引号,它看起来像这样:
[{"category":"a"},{"category":"a"},{"category":"b"},{"category":"b"},{"category":"c"}, {"category":"c"}]
其次,要完全按照您的要求进行操作,您可以这样做:
array_1 = (queryset_array[1], queryset_array[2])
array_2 = (queryset_array[3], queryset_array[4])
array_3 = (queryset_array[5], queryset_array[6])
但这仅在您的 queryset_array
恰好包含 6 个值时有效。
如果你想让你的代码更通用一点,你可以使用这个:
queryset_array = [{"category":"a"},{"category":"a"},{"category":"b"},{"category":"b"},{"category":"c"}, {"category":"c"}]
queryset_array2 = []
for x in range(len(queryset_array)):
if x % 2 == 0:
queryset_array2.append([queryset_array[x], queryset_array[x+1]])
或者如果输入数据不是这样组织的:
queryset_array = [{"category": "b"},{"category": "a"},{"category": "b"},{"category": "b"},{"category": "c"},{"category": "d"}]
queryset_array2 = {}
for item in queryset_array:
if item["category"] not in queryset_array2.keys():
queryset_array2[item["category"]] = []
queryset_array2[item["category"]].append(item)
试试这个:
from itertools import groupby
queryset_array = [{"category": "b"}, {"category": "a"}, {"category": "b"}, {"category": "b"}, {"category": "c"},
{"category": "d"}]
def key_func(k):
return k['category']
sorted_data = sorted(queryset_array, key=key_func)
count = 1
for key, value in groupby(sorted_data , key_func):
print(f'array_{count}= {list(value)}')
count += 1
输出
array_1= [{'category': 'a'}]
array_2= [{'category': 'b'}, {'category': 'b'}, {'category': 'b'}]
array_3= [{'category': 'c'}]
array_4= [{'category': 'd'}]
不使用任何库见下面的另一个回复。我已经更改了 queryset_array
以查看它是否正常工作。我还创建了一个字典 desired_dictionary
,它由 array_x
个键组成。
queryset_array = [{"category":"a"}, {"category":"a"},{"category":"a"}, {"category":"a"},{"category":"b"},{"category":"b"},{"category":"c"},{"category":"a"}, {"category":"b"}, {"category":"c"}, {"category":"c"},{"category":"b"},{"category":"c"}, {"category":"d"}]
def my_fnc(k):
return k['category']
sorted_queryset_array = sorted(queryset_array, key=my_fnc)
j = 1
values_dictionary = {}
desired_dictionary = {}
for i in sorted_queryset_array: # creating values_dictionary which includes values and how many times encountered.
for k,v in i.items():
val = f"value_{v}"
if val in values_dictionary:
j = j + 1
values_dictionary[val] = j
if val not in values_dictionary:
values_dictionary[val] = 1
j = 1
w = 1
desired_list = []
for k,v in values_dictionary.items():
values = k.split("_")
variable = f"array_{w}"
for p in range(0,v):
desired_list.append({"category": values[1]}) # This list desired_list is the desired data.
desired_dictionary[variable] = desired_list # Creating a dict with array_x values.
desired_list = []
w = w + 1
print(desired_dictionary)
# for k,v in desired_dictionary.items():
# print(v)
查看以下输出: