相关疑难解决方法(0)

如何判断python变量是字符串还是列表?

我有一个例程,它将一个字符串列表作为参数,但我想支持传入一个字符串并将其转换为一个字符串列表.例如:

def func( files ):
    for f in files:
        doSomethingWithFile( f )

func( ['file1','file2','file3'] )

func( 'file1' ) # should be treated like ['file1']
Run Code Online (Sandbox Code Playgroud)

我的函数如何判断字符串或​​列表是否已传入?我知道有一个type功能,但是有更"pythonic"的方式吗?

python duck-typing list

61
推荐指数
7
解决办法
5万
查看次数

抑制字符串处理为可迭代

更新:

2006年在python.org上提出了使内置字符串不可迭代的想法.我的问题不同之处在于我试图偶尔禁止这个功能; 仍然这整个线程非常相关.

以下是Guido的批评意见,他们str在试验基础上实施了不可迭代的评论:

[...]我实现了这个(这很简单)然后发现我必须修复大量遍布字符串的地方.例如:

  • sre解析器和编译器使用set("0123456789")之类的东西,并迭代输入regexp的字符来解析它.

  • difflib有两个字符串列表定义的API(文件的典型逐行差异),或两个字符串(典型的行内差异),甚至两个任何列表(对于广义序列差异) .

  • optparse.py,textwrap.py,string.py中的小变化.

而且我甚至还没有在regrtest.py框架工作的地方(由于difflib问题).

我放弃了这个项目; 补丁是SF补丁1471291.我不再赞成这个想法; 它只是不实用,而且我在sre和difflib中找到的用例都反驳了迭代字符串的好理由的前提.

原始问题:

虽然字符串的一个简洁功能是字符串是可迭代的,但当与鸭子打字相结合时,它可能会导致灾难:

# record has to support [] operation to set/retrieve values
# fields has to be an iterable that contains the fields to be set
def set_fields(record, fields, value):
  for f in fields:
    record[f] = value

set_fields(weapon1, ('Name', 'ShortName'), 'Dagger')
set_fields(weapon2, ('Name',), 'Katana')
set_fields(weapon3, 'Name', 'Wand') # I was tired and forgot to put parentheses
Run Code Online (Sandbox Code Playgroud)

除了isinstance(fields, …

python string iterable python-3.x

14
推荐指数
2
解决办法
5033
查看次数

字典中最常见的值

我有以下字典:

d = {"a":["MRS","VAL"],"b":"PRS","c":"MRS","d":"NTS"}
Run Code Online (Sandbox Code Playgroud)

我想创建一个字典,给出每个值的出现.基本上,它看起来像:

output = {"MRS":2,"PRS":1,"NTS":1,"VAL":1}
Run Code Online (Sandbox Code Playgroud)

有谁知道我怎么能这样做?提前致谢 !

python sorting dictionary

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

标签 统计

python ×3

dictionary ×1

duck-typing ×1

iterable ×1

list ×1

python-3.x ×1

sorting ×1

string ×1