我需要知道Python中的变量是字符串还是dict.下面的代码有什么问题吗?

if type(x) == type(str()):
    do_something_with_a_string(x)
elif type(x) == type(dict()):
    do_somethting_with_a_dict(x)
else:
    raise ValueError

Update:我接受了阿维瑟的回答(不过如果有人解释为什么isinstancetype(x) is更受欢迎,我会改变主意).

但感谢nakedfanatic提醒我,使用dict(作为 case 陈述)通常比使用if/elif/else系列更干净.

让我详细介绍一下我的用例.如果一个变量是一个字符串,我需要把它放在一个列表中.如果是dict,我需要一个唯一值的列表.以下是我的 idea :

def value_list(x):
    cases = {str: lambda t: [t],
             dict: lambda t: list(set(t.values()))}
    try:
        return cases[type(x)](x)
    except KeyError:
        return None

如果首选isinstance,您将如何编写这个value_list()函数?

推荐答案

如果有人将unicode字符串传递给您的函数,会发生什么?还是从dict派生的类?还是实现类似dict接口的类?以下代码涵盖了前两种情况.如果您使用的是Python2.6,您可能希望使用collections.Mapping,而不是ABC PEP中的dict.

def value_list(x):
    if isinstance(x, dict):
        return list(set(x.values()))
    elif isinstance(x, basestring):
        return [x]
    else:
        return None

Python相关问答推荐

pyautogui.locateOnScreen在Linux上的工作方式有所不同

如何使用Python中的clinicalTrials.gov API获取完整结果?

Python中MongoDB的BSON时间戳

如何从FDaGrid实例中删除某些函数?

如何根据日期和时间将状态更新为已过期或活动?

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

如何比较numPy数组中的两个图像以获取它们不同的像素

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

按顺序合并2个词典列表

我对我应该做什么以及我如何做感到困惑'

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

将JSON对象转换为Dataframe

改进大型数据集的框架性能

剪切间隔以添加特定日期

找到相对于列表索引的当前最大值列表""

有没有办法在不先将文件写入内存的情况下做到这一点?

如何在Gekko中处理跨矢量优化

python的文件. truncate()意外地没有截断'

Django在一个不是ForeignKey的字段上加入'