首页 > 解决方案 > 如何根据具有重复键值对的数据框行将值附加到python字典中的键

问题描述

我有带有键值对行的电子商务数据,例如:

row1: "ideal for":"women", "color":"blue"
row2: "ideal for": "women", "color":"red"
row3: "ideal for": "men", "color":"blue"

我需要的是创建一个包含相关值的键和数组的新字典,例如:

{"ideal for": ["women","men"], "color": ["red", "blue"]}

当我尝试将值附加到新字典中的键时,我似乎无法弄清楚以这种方式进行操作,以使值不会重复。

df.apply(lambda row: prep_text(row['product_specifications']), axis=1)
tag_info = df['product_specifications']
tag_info.replace('', np.nan, inplace=True)
tag_info.dropna(inplace=True)
tags_dict = dict()
for row in tag_info:
     for key, value in row.items():
         if key not in tags_dict:
             tags_dict[key] = [value]
         elif value not in tags_dict.values():
             tags_dict[key].append(value)

现在,我得到了一个看起来像这样的新字典:

{"ideal for": ["women","women","men"], "color":["blue", "red", "blue"]}

我该怎么做才能使这些值不重复?

标签: pythondictionary

解决方案


tags_dict.values() 的元素是字符串列表,而不是字符串。你应该检查

 elif value not in tags_dict[key]:
     tags_dict[key].append(value)

或者,您可以使用Set而不是List作为 tags_dict 的值。Set只能包含每个值的一个副本,因此如果您添加相同值的第二个副本,它将忽略它。但是Set中的值是无序的。

  if key not in tags_dict:
      tags_dict[key] = {value}
  else:
      tags_dict[key].add(value)

推荐阅读