我想要一个没有值的26个字典的字典(每个字母一个),它将读取一个字符串并创建一个列表,该列表将包含字符串中字母的位置,并将其与键相关联。
示例:如果我有以下字符串AZERTYUIOPAAAZ
,则字典中的键A
必须将列表[0,10,11,12]
作为值,因为我们找到了字母A
在字符串中的这些位置。我设法让我的字典为每个字母占一个位置,但我不能创建一个包含所有位置的列表。
这是我的代码:
string1 = "SQUALALANOUSSOMESPARTISETJETEDTESTE"
taille = len(string1)
dictio = dict()
dictio = {'A':None,'B':None,'C':None,'D':None,'E':None,'F':None,'G':None,'H':None,'I':None,'J':None,'K':None,'L':None,'M':None,'N':None,'O':None,'P':None,'Q':None,'R':None,'S':None,'T':None,'U':None,'V':None,'W':None,'X':None,'Y':None,'Z':None}
a = 0
for a in range(taille):
dictio[string1[a]] = a
print(dictio)
答案 0 :(得分:2)
问题是你的任务说明:
//setting.jsx
'use babel';
import React from 'react';
import ReactDOM from 'react-dom';
import TextField from 'material-ui/lib/text-field';
import RaisedButton from 'material-ui/lib/raised-button';
var Settings = React.createClass({
render(){
return (
<form>
<TextField
hintText="username"
floatingLabelText="please enter username"
type="text"
/>
<TextField
hintText="password"
floatingLabelText="please enter password"
type="text"
/>
<RaisedButton type="submit" label="login" className="button-submit" primary={true} />
</form>
);
}
});
export default Settings;
//TabNav.jsx
'use babel';
import fs from 'fs';
import React from 'react';
import ReactDOM from 'react-dom';
import Tabs from 'material-ui/lib/tabs/tabs';
import Tab from 'material-ui/lib/tabs/tab';
import FontIcon from 'material-ui/lib/font-icon';
import Settings from '../views/Settings.jsx';
import Timetable from '../views/Timetable.jsx';
import Notes from '../views/Notes.jsx';
class TabNav extends React.Component {
constructor(props) {
super(props);
this.state = {
value: 'timetable'
};
this.CourseJsonData = JSON.parse(fs.readFileSync('data/courses.json', 'utf8'));
}
handleChange = (value) => {
this.setState({
value: value
});
};
render() {
return (
<Tabs value={this.state.value} onChange={this.handleChange}>
<Tab value="timetable" icon={<FontIcon className="material-icons">view_list</FontIcon>}>
<Timetable data={this.CourseJsonData}/>
</Tab>
<Tab value="notes" icon={<FontIcon className="material-icons">assignment_turned_in</FontIcon>}>
<Notes/>
</Tab>
<Tab value="settings" icon={<FontIcon className="material-icons">settings</FontIcon>}>
<Settings/>
</Tab>
</Tabs>
);
}
}
export default TabNav;
您正在为地图中的特定值分配整数dictio[string1[a]] = a
。如果要将它们全部存储起来,则需要使用列表。如下所示:
a
答案 1 :(得分:2)
您可以使用A 1011 1012 1061
11001 873824 2240
11002 36792 557172
11003 2970
隐式地使用空列表初始化键。之后枚举字符并将其索引附加到正确的桶中。
defaultdict
答案 2 :(得分:2)
不是一个漂亮的解决方案,但它是您的计划的设计方式:制作dictio = {'A':[],'B':[],'C':[],'D':[],......
并在循环中dictio[string1[a]].append(a)
答案 3 :(得分:1)
有几种方法:
固定的字典集
string1 = "SQUALALANOUSSOMESPARTISETJETEDTESTE"
dictio = {'A':[],'B':[],'C':[],'D':[],'E':[],'F':[],'G':[],'H':[],'I':[],'J':[],'K':[],'L':[],'M':[],'N':[],'O':[],'P':[],'Q':[],'R':[],'S':[],'T':[],'U':[],'V':[],'W':[],'X':[],'Y':[],'Z':[]}
i = 0
for char in string1:
dictio[char].append(i)
i += 1
# {'L': [4, 6], 'A': [3, 5, 7, 18], 'Z': [], 'N': [8], 'J': [25], 'B': [], 'M': [14], 'C': [], 'S': [0, 11, 12, 16, 22, 32], 'K': [], 'W': [], 'Q': [1], 'O': [9, 13], 'R': [19], 'E': [15, 23, 26, 28, 31, 34], 'D': [29], 'P': [17], 'X': [], 'G': [], 'I': [21], 'H': [], 'Y': [], 'U': [2, 10], 'F': [], 'V': [], 'T': [20, 24, 27, 30, 33]}
变量字典
string1 = "SQUALALANOUSSOMESPARTISETJETEDTESTE"
dictio = {}
i = 0
for char in string1:
if char not in dictio:
dictio[char] = []
dictio[char].append(i)
i += 1
第二个版本会给出一个只有字母的字典。
答案 4 :(得分:0)
正如L-Jones所解释的那样,您的原始系统失败了,因为您在每个点都设置了字典的值。要解释一下,如果您执行以下操作:
a = 1
a = 2
a
的值为2,没有1
值的记录。这实际上与替换给定键的字典值相同。
如果您将字典的默认值初始化为空列表[]
,而不是None
,则可以使用append
在必要时添加索引。请参阅以下内容:
import string
string1 = "SQUALALANOUSSOMESPARTISETJETEDTESTE"
taille = len(string1)
dictio = dict()
dictio = {letter: [] for letter in string.ascii_uppercase}
# The above is a shorter alternative to typing out all of the letter-empty list pairs by hand
# a = 0 is unnecessary because a will be initialized to 0 with the range
for a in range(taille):
dictio[string1[a]].append(a)
print(dictio)
请注意,字典不会被排序为A-Z,原因我并不完全确定,但它会包含您需要的所有内容。
如果您不关心没有索引的字母,请参阅Nander Speerstra在其答案中提出的解决方案:变量字典,其中不包含不在其中的密钥串。它会以一点时间开销为代价来降低内存成本,无论如何这可能都不会很大。如果你真的想要压缩声明:
import string
string1 = "SQUALALANOUSSOMESPARTISETJETEDTESTE"
taille = len(string1)
dictio = dict()
dictio = {letter: [] for letter in string.ascii_uppercase}
for index, letter in zip(range(taille), string1):
dictio[letter].append(index)
print(dictio)
也可以与变量dict系统结合使用。