英文:
Re-organizing lists of lists in python
问题
我是新手学习Python,尝试读取一个包含对象位置数据的大型文件,涵盖了一段时间序列。类似于:
```python
for a in dum_un.file:
FD = dum_un.select_object("type 1")
r = FD.positions
每个 r
对应于特定的时间点,列表内的列表对应于该时间点物体的x、y和z位置。整个时间序列中的顺序保持一致。两个物体的示例:
for循环的第一次迭代:r = [[1.11, 2.64, 3.3],[4.0, 5.12, 6.32]]
for循环的第二次迭代:r = [[5.7, 4.44, 1.8],[6.3, 8.9, 4.7]]
我想要能够访问每个对象在整个时间序列内所有x(或y或z)值的列表,例如:
对于对象1,x = [1.11, 5.7]
对于对象2,x = [4.0, 6.3]
<details>
<summary>英文:</summary>
I am new to python and trying to read a large file with position data for objects over a time series. Something like:
~~~python
for a in dum_un.file:
FD = dum_un.select_object("type 1")
r = FD.positions
~~~
Each `r` corresponds to a specific time point, and each list-within-the-list corresponds to the x, y, and z positions of an object at that time point. The ordering is the same throughout the time series. Example for 2 objects:
First iteration of the for loop: `r = [[1.11, 2.64, 3.3],[4.0, 5.12, 6.32]]`
Second iteration of the for loop: `r = [[5.7, 4.44, 1.8],[6.3, 8.9, 4.7]]`
I want to be able to access a list of all x (or y or z) values for each object over the entire time series, e.g., here:
`x = [1.11, 5.7]` for object 1
`x = [4.0, 6.3]` for object 2
</details>
# 答案1
**得分**: 1
这里是一种方法。
解析创建了一个名为`objects`的字典,看起来类似于这样:
```json
{
"1": {
"x": [1.11, 5.7],
"y": [...],
"z": [...]
},
"2": {
"x": [...],
"y": [...],
"z": [...]
},
// 其他对象的数据...
}
以下是代码:
# 这个列表表示每次迭代中 `r` 的值
all_r = [
[[1.11, 2.64, 3.3], [4.0, 5.12, 6.32]],
[[5.7, 4.44, 1.8], [6.3, 8.9, 4.7]]
]
# 初始化一个字典来收集所有结果
# 每个条目的键将是对象的“ID”
# 例如,`r` 中的第一个项目代表“对象 1”。
objects = dict()
for r in all_r:
for i, coordinates in enumerate(r):
# Python 索引从零开始。因此,加一以匹配您的定义
object_id = str(i + 1)
# 如果对象的字典键不存在,则初始化
if object_id not in objects.keys():
objects[object_id] = {
"x": [],
"y": [],
"z": []
}
# 将每个坐标添加到相应的X、Y或Z列表中
objects[object_id]["x"].append(coordinates[0])
objects[object_id]["y"].append(coordinates[1])
objects[object_id]["z"].append(coordinates[2])
expected_x_object_1 = [1.11, 5.7]
expected_x_object_2 = [4.0, 6.3]
actual_x_object_1 = objects.get("1", dict()).get("x", None)
actual_x_object_2 = objects.get("2", dict()).get("x", None)
assert expected_x_object_1 == actual_x_object_1
assert expected_x_object_2 == actual_x_object_2
英文:
Here's one way.
The parsing creates a dictionary called objects
that looks something like this:
{
"1": {
"x": [1.11, 5.7],
"y": [...],
"z": [...],
},
"2": {
"x": [...],
"y": [...],
"z": [...],
},
...
}
Here's the code:
# This list represents the value of `r` in each iteration
all_r = [
[[1.11, 2.64, 3.3],[4.0, 5.12, 6.32]],
[[5.7, 4.44, 1.8],[6.3, 8.9, 4.7]]
]
# Initialise a dictionary to collect all the results
# The key for each entry will be the object "ID"
# e.g. the first item in `r` represents "object 1".
objects = dict()
for r in all_r:
for i, coordinates in enumerate(r):
# Python indexes start at zero. So increment by one to match your definition
object_id = str(i + 1)
# Initialise the dictionary key for our object if it doesn't exist already
if object_id not in objects.keys():
objects[object_id] = {
"x": [],
"y": [],
"z": [],
}
# Add each co-ordinate to their relevant X, Y or Z list
objects[object_id]["x"].append(coordinates[0])
objects[object_id]["y"].append(coordinates[1])
objects[object_id]["z"].append(coordinates[2])
expected_x_object_1 = [1.11, 5.7]
expected_x_object_2 = [4.0, 6.3]
actual_x_object_1 = objects.get("1", dict()).get("x", None)
actual_x_object_2 = objects.get("2", dict()).get("x", None)
assert expected_x_object_1 == actual_x_object_1
assert expected_x_object_2 == actual_x_object_2
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论