【发布时间】:2017-05-17 12:53:18
【问题描述】:
假设我们有一个这样的字典:
my_dict = {'foo': [1, 2.325, 'asdasd', lambda x: x[0], ...], ...}
如何在不知道任何键的情况下以最有效的方式获取值的类型(列表中的单个项目,而不是列表本身)?
我想出了两种方法,但都觉得有点矫枉过正:
方法一:
var_types = [type(x) for x in list(my_dict.values())[0]]
我想随着字典变大,将 my_dict.values() 转换为列表可能会变慢..
方法二:
for k in my_dict:
var_types = [type(x) for x in my_dict[k]]
break
一个完整的 for 循环,在单次迭代后手动终止..
那么,有没有更好的办法呢?
问题在于dict.values() 不返回一个iterator,而是一个不支持索引的dict_values 对象..
编辑:对于这个例子,假设所有字典键的变量类型都是相同的。
【问题讨论】:
-
dict_values确实实现了迭代器协议。仅仅因为它不支持索引并不意味着它不可迭代。 -
@NicholasFlees 那么你会怎么做呢?
-
我对你想要做什么感到有点困惑。您是否只是想获取字典中值的第一个元素的类型(假定为列表)?
-
@NicholasFlees 如果
my_list是任意字典键的值,我正在尝试获取[type(x) for x in my_list]。所以在这个例子中它将是[int, float, str, function, ..]
标签: python python-3.x dictionary