python - 通过跳过第一个键值对字典进行迭代
问题描述
我已经定义了一个带有键和数据框的字典,就像这样
data = {'Value':[0,1,2,3,4]}
kernel_df = pd.DataFrame(data, index=['M0','M1','M2','M3','M4'])
my_dict = {'dummy':kernel_df}
并且my_dict
后来填充了适当的数据。接下来,我想从第二个键开始遍历字典,因为第一个(索引 0)是虚拟的,我想跳过它。如果我使用
for key in my_dict:
然后第一个键也被读取。如果我使用
for i in {1..len(my_dict)}:
df = my_dict[i]
我收到以下错误
for i in {1..len(my_dict)}:
AttributeError: 'float' object has no attribute 'len'
我该如何解决?
解决方案
字典没有固有的顺序(好吧,在 Python 3.7中发生了变化,现在它们保持了插入的顺序。
但是,您仍然不能像索引列表那样索引字典。(好吧,如果你真的愿意,你可以接近那种行为,但我会在最后解决这个问题)。
在您的情况下,您可以遍历键并跳过键,如果它是“虚拟”(或任何您定义的)。
for key in my_dict:
if key != 'dummy':
do your thing
一旦您知道您的字典已经填充了正确的值,也许更好的选择是简单地删除“虚拟”键。
现在,回到获取“第一个密钥”,因为一个 >= Python 3.7 用户:
好的,如果有人真的想依赖版本特定功能的技术实现,他们可能会做这样的事情:
for idx, key in enumerate(my_dict.keys()):
if idx != 0:
do your thing
不过,这与惯用代码相去甚远,所以实际上,您不应该这样做。
推荐阅读
- c++ - Why does my code put false values in int array?
- docker - Docker-compose 有效,只是 Docker 使用 Dockerfile - 没有。为什么?
- python - cmd displaying output only after program has finished
- laravel - Laravel 8 - GET http://localhost:8000/css/app.css net::ERR_ABORTED 404 (Not Found)
- csv - 将 bytes.Buffer 与 csv.writer 一起使用
- r - 使用 stringr (r) 提取多个条件
- java - BufferedReader 中的 readLine() 是如何工作的?
- dask - 分布式 dask 调度程序节点是否需要与工作节点相同的环境?
- python - 快速将 SQL 数据序列化为 python 列表
- c++ - C ++访问结构中结构数组的元素