2

我正在循环遍历 csv 行以提取和转换数据。

csv 看起来像这样:

alex, blue, 3
alex, blue, 4
liza, green, 2
alex, red, 4
alex, orange, 3
liza, blue, 2
liza, blue, 21
liza, yellow, 23

我想要从上面得到的结果是 2 个文件:

亚历克斯文件

<blue>3, 4</blue>
<red>4</red>
<orange>3</orange>

丽莎文件

<green>2</green>
<blue>2,21</blue>
<yellow>23</yellow>

我不是在找你为我解决这个问题,我只是在寻找你的指导。我不需要 xml 部分的帮助,我只需要 LOGIC 部分的帮助。

非常感谢!

4

3 回答 3

3

我在这里首选的数据结构(假设名称和颜色的顺序并不重要!)将是嵌套的defaultdict. 通常的用法是这样的:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d['blue'].append(3)
>>> d['blue'].append(4)
>>> d
defaultdict(<type 'list'>, {'blue': [3, 4]})

但我们也可以更深一层:

>>> d = defaultdict(lambda: defaultdict(list))
>>> d
defaultdict(<function <lambda> at 0x1004bf9b0>, {})
>>> d['alex']['blue'].append(3)
>>> d['alex']['blue'].append(4)
>>> d['liza']['green'].append(2)
>>> d
defaultdict(<function <lambda> at 0x1004bf9b0>, {'liza': defaultdict(<type 'list'>, {'green': [2]}), 'alex': defaultdict(<type 'list'>, {'blue': [3, 4]})})
>>> d.keys()
['liza', 'alex']
>>> d['alex'].keys()
['blue']
>>> d['alex']['blue']
[3, 4]
于 2012-08-29T03:07:04.403 回答
2

列表字典怎么样?每次遇到字典中未找到的内容时,都会将该元素的列表添加到字典中。然后,您可以将重复元素附加到字典内的列表中。

您的示例输入的结果结构将是:

alex dictionary:
{
   "blue" : [3,4],
   "red": [4],
   "orange": [3]
}

liza dictionary:
{
   "green" : [2],
   "blue": [2,21],
   "yellow": [23]
}

当然,您可以使用另一个字典层进一步抽象出 liza 和 alex。

于 2012-08-29T02:59:54.803 回答
1

最好为 alex 文件和 liza 文件维护一系列列表(每种颜色一个),因为您不知道每种颜色有多少条目。所以本质上,您将遍历 csv,确定您是在处理 alex 还是 liza(第一条信息),确定颜色(第二条信息),并将整数值(第三条信息)附加到适当的清单。完成文件浏览后,创建两个输出文件应该不难。

编辑:当然,如果您不知道会遇到哪些颜色或会遇到大量颜色,那么使用其他答案建议的字典方法可能是最明智的。

于 2012-08-29T03:00:53.507 回答