小编use*_*183的帖子

将嵌套的花括号变成 dict python

我有一个看起来像这样的文件:

{val1 {val2 {d1 d2 d3}}}
Run Code Online (Sandbox Code Playgroud)

我想制作一个 dict 或其他合适的数据结构,以便像这样访问结构:

data[val1][val2]
Run Code Online (Sandbox Code Playgroud)

将以d1, d2, d3另一种合适的数据结构(例如列表、元组或集合)输出数据值。

是否有一个内置的库函数可以做到这一点,或者任何人都可以提出一种简单的方法来做到这一点?

注意:数据点的数量d1 d2 d3可能不是恒定的,所以对于一组不同的值,我可以d1 d2 d3 d4 d5等。

编辑:我应该补充一点,我写了输出,所以如果需要,我可以将大括号更改为完全不同的东西。

python dictionary data-structures

3
推荐指数
1
解决办法
1266
查看次数

Fortran存储连接字符串

我有一个简单的程序:

PROGRAM concatenate

CHARACTER::char*11,name*4

CHARACTER(20)::charname

char='hello there'
name='Fred'

WRITE(*,*) char

WRITE(*,*) name

charname = char // ', ' // name

WRITE(*,*) charname

END PROGRAM
Run Code Online (Sandbox Code Playgroud)

假设我不想提前指定变量charname的长度,因此其长度由char和name的长度自动确定.我可以在Fortran中这样做吗?

谢谢

fortran

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

代码气味 - if/else构造

我有一个9个元素的列表.前三个代表位置,下一个速度,下一个力量.

有时我需要阵列中的力,其他时间速度,以及其他时间位置.

所以我写了一个函数如下:

def Extractor(alist,quantity):

    if quantity=='positions':
        x = alist[0]
        y = alist[1]
        z = alist[2]
        return (x,y,z)

    elif quantity=='velocities':
        vx = alist[3]
        vy = alist[4]
        vz = alist[5]
        tot_v = np.sqrt(vx**2 + vy**2 + vz**2)
        return (vx,vy,vz,tot_v)

    elif quantity=='forces':
        fx = alist[6]
        fy = alist[7]
        fz = alist[8]
        tot_f = np.sqrt(fx**2 + fy**2 + fz**2)
        return (fx,fy,fz,tot_f)
    else:
        print "Do not recognise quantity: not one of positions, velocities, force"
Run Code Online (Sandbox Code Playgroud)

但是,由于代码重复,这似乎是一个巨大的代码味道.是否有更好,更pythonic的方式来做到这一点?我对OOP很新,但是我可以使用某种类继承来利用多态吗?

python oop code-duplication

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

Python异常 - 循环中具有try ... except子句的函数

我经常遇到这样的情况:

import os

for i in range(10):
    os.mkdir(i)
Run Code Online (Sandbox Code Playgroud)

但是,有时一个目录已经存在,在这种情况下,os.mkdir会抛出一个OSError.当发生这种情况时,我只是希望它跳过循环的其余部分并移动到i的下一次迭代,所以我经常写这样的东西:

for i in range(10):
    try:
        os.mkdir(i)
    except OSError:
        continue
Run Code Online (Sandbox Code Playgroud)

但是,我真正想要的是一个封装该行为的函数.像这样的东西:

def custom_mkdir(directory):
    try:
        os.mkdir(directory)
    except OSError:
        continue
Run Code Online (Sandbox Code Playgroud)

所以我可以有这样的代码:

for i in range(10):
    custom_mkdir(i)
Run Code Online (Sandbox Code Playgroud)

具有预期的行为,如果目录不存在,它会跳转到for循环的下一个交互,如果它存在的话.

但是,continue语句不能以这种方式包含在函数中.那么如何在不诉诸的情况下获得预期的行为:

for i in range(10):
    try:
        custom_mkdir(i)
    except OSError:
        continue
Run Code Online (Sandbox Code Playgroud)

哪个比第一个更糟?

python exception

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