【问题标题】:Placeholder in dictionaries [duplicate]字典中的占位符[重复]
【发布时间】:2021-03-28 20:43:15
【问题描述】:

我试图在字典列表中进行搜索,我想使用 list.index() 函数,但要做到这一点,我需要知道完整的字典。现在只使用一个 2 元素字典,我该如何实现。

d = [{"a":1.0},{"b":2.0},{"c":3.0},{"d":4.0}]
print(d.index({"c":<class 'float'>}))

我想要做的是获取字典的索引,我只知道字典的第一个键而没有别的。

【问题讨论】:

  • 条件为"c" in dictionary
  • 我不想使用循环。
  • next(x for x in d if "c" in x) 对您来说算作循环吗?循环有什么问题?
  • 这只是一个示例问题,真正的问题有 3 个嵌套循环,我想保持循环倒计时。我不能使用过滤器或下一步,所以我想到的下一个最好的事情是我可以做 list.index({"c":}) 但类型的东西不起作用。
  • 为什么不能使用filternext?如果您不编写显式循环,那几乎是您唯一的选择。 index 也在内部使用循环。唯一的其他可能性是使用二进制搜索,但这需要对列表进行排序。

标签: python dictionary


【解决方案1】:

您可以过滤 d 以查找该键并获得第一次出现。

d = [{"a":1.0},{"b":2.0},{"c":3.0},{"d":4.0}]

key_to_search = "c"
print(next(filter(lambda x: key_to_search in x, d)))  # get value
print(next(i for i, x in enumerate(d) if key_to_search in x))  # get idx

另一种查找索引的方法,如果你知道每个字典只有一个键,那就是这个(虽然对于大输入来说要慢得多):

print(list(map(lambda x: next(iter(x)), d)).index(key_to_search))

或者使用 for 循环:

for idx, dict_ in enumerate(d):
    if key_to_search in dict_:
        print(idx)
        break

或者使用 for 循环且不使用枚举:

idx = 0
for dict_ in d:
    if key_to_search in dict_:
        print(idx)
        break
    idx += 1

【讨论】:

    猜你喜欢
    • 2021-09-20
    • 2013-11-27
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多