<p>这取决于你想要什么。在</p>
<p>最好的方法可能是使用嵌套列表,而不是使用字典。既然您提到了pandas,pandas DataFrame对象有一个<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_dict.html" rel="nofollow">^{<cd1>}</a>函数,该函数将数据帧转换为字典,并且根据您的喜好有几个选项。在</p>
<p>我从您的示例中看到,您正在尝试创建具有重复索引的数据结构。这里最好的选择是使用通过运行<code>df.to_dict("split")</code>创建的结构。在</p>
<p>假设您的数据帧(df)如下所示:</p>
<pre><code> 3 1 2 4
2 0 0 0 0
1 0 0 0 0
2 0 0 0 0
1 0 0 0 0
</code></pre>
<p>跑步`数据到字典(“分割”)将执行以下操作:</p>
^{pr2}$
<p>在这个场景中,以及在@Makiflow所示的场景中访问数据是很棘手的。即使在Pandas中,数据帧上有重复的索引或列也会使操作更有趣。在本例中,选择<code>df['data'][3][1]</code>将选择<code>data</code>键所包含的第三个列表中的第二个元素。这实际上是选择矩阵的第4行和第2列。如果你想通过列<em>名称</em>来引用项目,就必须多做一些腿部工作。在</p>
<p>您可以运行<code>col_num = d['columns'].index(3)</code>,它将为您提供元素<code>3</code>的索引值,但执行<code>d['index'].index(2)</code>操作将始终为0,即使要在索引3处选择2。{cd8>返回第一个条件的值,因为该条件与第一个条件的值匹配。当然,您可以简单地通过(col,row)索引元组进行选择,但这样做首先会破坏列名称和索引值的目的。在</p>
<p>如果要在不使用pandas的情况下生成此结构,可以运行:
列,行=5,5
列=[随机.randint(0,COLS)对于范围内的(COLS)]
行=[随机.randint(1,2)对于范围内的(行)]</p>
<pre><code>d = {"columns": columns,
"index": rows,
"data": [[0 for _ in range(COLS)] for _ in range(ROWS)]
}
</code></pre>
<p>IMHO-一个更好的解决方案实际上是强制数据结构具有唯一的索引和列值。<code>to_dict()</code>的默认输出将输出一个非常简单的字典:</p>
<pre><code>d = df.to_dict() # also the same as df.to_dict("dict")
{
1: {1: 0, 2: 0},
2: {1: 0, 2: 0},
3: {1: 0, 2: 0},
4: {1: 0, 2: 0}
}
</code></pre>
<p>在这种配置中,字典的每个键都是列的名称。这些键中的每一个都指向另一个表示该列中信息的二进制数-每个键都是一个索引值,后跟一个值。在</p>
<p>这很可能是最直观的,因为如果您想在名为<em>的索引</em>1的<em>列中获得名为</em>3的值,您可以:</p>
<pre><code> d = df.to_dict()
d[3][1]
# 0
</code></pre>
<p>无需使用Pandas即可创建此数据结构:</p>
<pre><code>COLS, ROWS = 5,5
rows = [i for i in range(ROWS)]
columns = [i for in range(COLS)]
{c : {i:0 for i in rows} for c in columns}
# {
# 0: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
# 1: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
# 2: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
# 3: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
# 4: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}
# }
</code></pre>
<p>它实际上取决于你所拥有的约束/需求。在</p>