小编Joe*_*ult的帖子

如何根据条件将列表中的数据收集到组中?

不知道如何标题这个问题.我遇到过一些情况,我有一个数据列表,可能带有一些属性注释,我想将它们收集到组中.

例如,也许我有这样的文件:

some event
reading: 25.4
reading: 23.4
reading: 25.1
different event
reading: 22.3
reading: 21.1
reading: 26.0
reading: 25.2
another event
reading: 25.5
reading: 25.1
Run Code Online (Sandbox Code Playgroud)

并且我想对每组读数进行分组,将它们分成条件(在这种情况下,发生事件),这样我最终得到的结构就像

[['some event',
  'reading: 25.4',
  'reading: 23.4',
  'reading: 25.1'],
 ['different event',
  'reading: 22.3',
  'reading: 21.1',
  'reading: 26.0',
  'reading: 25.2'],
 ['another event',
  'reading: 25.5',
  'reading: 25.1']]
Run Code Online (Sandbox Code Playgroud)

在它的通用形式中,它是:查找条件,收集数据直到该条件再次为真,重复

现在,我会做类似的事情

events = []
current_event = []

for line in lines:
    if is_event(line):
        if current_event:
            events.append(current_event)
        current_event = [line]

    else:
        current_event.append(line)
else:
    if current_event:
        events.append(current_event)


def is_event(line):
    return …
Run Code Online (Sandbox Code Playgroud)

python grouping parsing

6
推荐指数
3
解决办法
249
查看次数

将字典数组转换为具有可能不匹配字段名的二维数组

我习惯于csv.Dictreader读取 csv 文件,因为通过字段名访问项目非常方便,但是该类csv.Dictwriter对于如何处理字段名非常挑剔。"dict contains fields not in fieldnames"当我特别不希望字典包含我提供的所有字段名时,我遇到了很多异常。我还希望能够提供字段名列表,其中的键可能不会出现在字典列表的每一行中。

因此,我创建了一种将字典列表转换为可以与该csv.writer.writerow函数一起使用的二维数组的方法。

问题:

我想知道我的方法是好是坏还是丑陋。有没有更好/更Pythonic的方法将具有任意字段名的字典列表转换为二维数组?我错过了一些明显的东西吗csv.DictWriter

代码:

它的作用是:

输出将跳过您未提供的字段名称,但如果您提供的字段名称未出现在每个(或任何)行中,但仍将其包含在顶部的标题中,则输出也会仅放置一个空格。 csv 文件。

def csvdict_to_array(dictlist, fieldnames):
    # Start with header row
    csv_array = [fieldnames]

    for row in dictlist:
        csv_array.append(dictlist_row_to_list(row, fieldnames))

    return csv_array

def dictlist_row_to_list(dictlist_row, fieldnames):
    csv_row = []

    for field in fieldnames:
        if field not in dictlist_row:
            csv_row.append('')
        else:
            csv_row.append(dictlist_row[field])

    return csv_row
Run Code Online (Sandbox Code Playgroud)

输入/输出示例:

fieldnames = ["one", "three", "ten"]
dictlist = [{"one": "bob", "two": "bill", "three":"cat"},
            {"one": "john", …
Run Code Online (Sandbox Code Playgroud)

python csv dictionary

4
推荐指数
1
解决办法
1975
查看次数

如果可能,python重用列表吗?

我的意思是,如果你覆盖一个具有相同形状列表的列表,它是否保留第一个列表?例如:

point = [1, 2]
for x in xrange(10000000):
    point = [x, x + 1]
Run Code Online (Sandbox Code Playgroud)

不Python从重用列表point = [1, 2]中循环,只需在更新引用的每一次迭代point[0],并point[1]xx + 1?或者它是否在每次迭代中创建一个新列表并丢弃旧的列表?换句话说,就是性能相当于

point = [1, 2]
for x in xrange(10000000):
    point[0] = x
    point[1] = x + 1
Run Code Online (Sandbox Code Playgroud)

我只是好奇如果python在引擎盖下进行那种类型的优化

编辑:除了下面的每个人都说的,我根据自己的好奇心进行基准测试.

在我尊敬的thinkpad的Core2Duo上:

point = [1, 2]
for x in xrange(10000000):
    point = [x, x + 1]

# Result:
# real    0m6.164s


point = [1, 2]
for x in xrange(10000000):
    point[0] = …
Run Code Online (Sandbox Code Playgroud)

python

4
推荐指数
1
解决办法
656
查看次数

从词典列表中联合所有键

说我有一个词典列表.它们在每行中大多数具有相同的键,但有一些不匹配并且具有额外的键/值对.有没有快速的方法来获取所有行中的所有键的集合?

现在我正在使用这个循环:

def get_all_keys(dictlist):
    keys = set()
    for row in dictlist:
        keys = keys.union(row.keys())
Run Code Online (Sandbox Code Playgroud)

在具有数十万行的列表上执行此操作似乎非常低效,但我不确定如何更好地执行此操作

谢谢!

python dictionary list

2
推荐指数
1
解决办法
1509
查看次数

Numpy 数组索引和/或添加似乎很慢

我正在尝试对 numpy 数组进行基准测试,因为当我尝试在脚本中用 numpy 数组替换 python 数组时,结果比预期的要慢。

我知道我错过了一些东西,我希望有人能澄清我的无知。

我创建了两个函数并对它们计时

NUM_ITERATIONS = 1000

def np_array_addition():
    np_array = np.array([1, 2])
    for x in xrange(NUM_ITERATIONS):
        np_array[0] += x
        np_array[1] += x


def py_array_addition():
    py_array = [1, 2]
    for x in xrange(NUM_ITERATIONS):
        py_array[0] += x
        py_array[1] += x
Run Code Online (Sandbox Code Playgroud)

结果:

np_array_addition: 2.556 seconds
py_array_addition: 0.204 seconds
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?是什么导致了大规模放缓?我想如果我使用静态大小的数组 numpy 至少会具有相同的速度。

谢谢!

更新:

numpy 数组访问速度缓慢一直困扰着我,我想“嘿,它们只是内存中的数组,对吗?Cython 应该解决这个问题!”

它做到了。这是我修改后的基准

import numpy as np
cimport numpy as np    

ctypedef np.int_t DTYPE_t    


NUM_ITERATIONS = 200000
def np_array_assignment():
    cdef np.ndarray[DTYPE_t, ndim=1] np_array …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

2
推荐指数
1
解决办法
4787
查看次数

标签 统计

python ×5

dictionary ×2

arrays ×1

csv ×1

grouping ×1

list ×1

numpy ×1

parsing ×1