我从CSV文件中读取信息,并使用嵌套字典来映射文件中的重复信息。如何为该文件的所有行创建嵌套词典?数据示例(不是实际数据,而是基本相同的概念)
State ,City/Region ,Questions ,Answers
NY,Manhattan ,East/West Coast? ,East
NY,Manhattan ,been there? ,yes
NY,Brooklyn ,East/West Coast? ,East
NY,Brooklyn ,been there? ,yes
NY,Brooklyn ,Been to coney island? ,yes
NY,Queens ,East/West Coast? ,East
NY,Queens ,been there? ,yes
NY ,Staten Island ,is island? ,yes
MA,Boston ,East/West Coast? ,East
MA,Boston ,like it there? ,yes
MA,Pioneer Valley ,East/West Coast? ,East
MA,Pioneer Valley ,city? ,no
MA,Pioneer Valley ,college town? ,yes
CA,Bay Area ,warm? ,yes
CA ,Bay Area ,East/West Coast? ,West
CA ,SoCal ,north or south? ,south
CA ,SoCal ,warm ,yes
因此,基本上,主字典有3个键:NY、MA、CA,每个键都有一个以City/Region为键的字典,每个City/Region都有问题和答案。
所以这将是一个非常嵌套的字典,但我无法找出语法,以便对文件中的每一行都这样做。在
我尝试过打开文件,使用for循环来读取行并用“,”分隔行。像这样:
^{pr2}$
您可以使用负责分割的csv模块读取CSV文件。在
您给出的示例数据充满了不需要的空格。如果您的实际数据与此相同,我们使用
strip
对其进行清理。在为了避免在字典中创建丢失的键,可以使用defaultdict。它使用默认值动态创建缺少的键。在
例如,您可以:
^{pr2}$要创建一个
defaultdict
,将空dict作为丢失键的默认值,并按如下方式使用它:在您的例子中有一个困难:您需要一个嵌套字典,所以我们需要一个}
defaultdict
的defaultdict
,属于{我们给
defaultdict
的参数必须是可调用的,因此我们不能编写类似defaultdict(defaultdict(dict))
的内容,因为defaultdict(dict)
是defaultdict
,而不是函数。实现这一点的一种方法是使用functools.partial创建一个defaultdict_of_dict
函数,我们可以将它传递给主defaultdict
。在你可以试试这个稍短的版本:
我想办法让它工作。在
相关问题 更多 >
编程相关推荐