当前位置: 首页 > 面试题库 >

如何将由空格分隔的键字符串,唯一单词的值对转换为字典

堵琨
2023-03-14
问题内容

我有一个字符串,单词之间用空格隔开(所有单词都是唯一的,没有重复)。我将此字符串转换为列表:

s = "#one cat #two dogs #three birds"
out = s.split()

并计算创建多少个值:

print len(out) # Says 192

然后,我尝试从列表中删除所有内容:

for x in out:
     out.remove(x)

然后再次计数:

print len(out) # Says 96

有人可以解释为什么它说96而不是0吗?

更多信息

每行以“#”开头,​​实际上是一对空格分隔的单词:该对中的第一行是键,第二行是值。

因此,我正在做的是:

for x in out:
     if '#' in x: 
          ind = out.index(x) # Get current index 
          nextValue = out[ind+1] # Get next value 
          myDictionary[x] = nextValue
          out.remove(nextValue)
          out.remove(x)

问题是我无法将所有键,值对移入字典,因为我仅迭代96个项目。


问题答案:

我认为您实际上想要这样的东西:

s = '#one cat #two dogs #three birds'
out = s.split()
entries = dict([(x, y) for x, y in zip(out[::2], out[1::2])])

这段代码在做什么?让我们分解一下。首先,我们s按空格将out其拆分为您所拥有的。

接下来,我们遍历对中的对out,将它们称为“ x, y”。这些对成为list元组/对。
dict()接受大小为2的元组的列表,并将其视为key, val

这是我尝试时得到的:

$ cat tryme.py

s = '#one cat #two dogs #three birds'
out = s.split()
entries = dict([(x, y) for x, y in zip(out[::2], out[1::2])])

from pprint import pprint
pprint(entries)

$ python tryme.py
{'#one': 'cat', '#three': 'birds', '#two': 'dogs'}


 类似资料:
  • 我想在没有空格的标题中查找并分隔单词。 之前: 这是一个示例标题黑色-世界2019T.E.S.T.(测试)“测试”“测试”[测试] 之后: 这是一个例题标题HELLO-WORLD 2019 T.E.S.T .(测试)[测试]“测试”'测试' 我正在寻找一个可以执行以下操作的正则表达式规则。 我想我会识别每个以大写字母开头的单词。 但也要保留所有大写单词,以免将它们分隔为。 附加规则: 如果字母与数

  • 给我一个字符串“23 45”,我需要得到两个值为23的变量(int a)和值为45的变量(int b)

  • 问题内容: 假设我有一个字符串“ 1 23 40 187 298”。该字符串仅包含整数和空格。如何将这个字符串转换为整数数组[1,23,40,187,298]。这就是我尝试的方式 但它不起作用,请提供一些帮助。谢谢! 问题答案: 你忘记了 解析为空字符串以创建新数字位后重置为空字符串 在字符串的末尾将没有空格,所以 } 将不会被调用,这意味着您需要调用 循环后再次 但更简单的方法是只用创建令牌的临

  • 问题内容: 如何将String转换为Map: 预期产量: 问题答案: 无需重新发明轮子。Google Guava库提供了该类。 这是如何与一些测试代码一起使用的:

  • 问题内容: 如何在Java中转换为逗号分隔的字符串? 结果我想要: 这是非常相似的参考问题,但是这些解决方案都无法提供结果,这正是我所需要的。 到目前为止我尝试过的 问题答案: 这是一个流版本,在功能上等同于khelwood,但使用了不同的方法。 他们都创建了一个,将每个映射到一个,并用逗号将它们连接在一起。 它们在性能上也应该完全相同,尽管从 技术上讲 我是直接打电话给他,而他是在打电话给代表。