我有一本与此类似的词典
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, new Uri("https://outlook.office365.com/api/v1.0/me/events/"+meeting.OutlookEventId));
var auth = "Bearer " + token;
request.Headers.Add("Accept", "application/json");
request.Headers.Add("Authorization", auth);
var converters = new List<JsonConverter>();
converters.Add(new MyStringEnumConverter());
var createResponse = @"{
'Location': {
'DisplayName': 'Your office'
}
}";
request.Content = new StringContent(createResponse);
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await client.SendAsync(request);
我想访问各个字符串,即a,b等,比较它是否有“a”,删除它们。
主要问题是 - 如何访问字符串?我该如何更改?
我尝试使用嵌套循环,但无法更改,因为我猜分配stmts不会那样工作。
知道如何处理这种情况吗?
编辑:我使用的天真方法 -
x ={'1': [['a','b'],['ac','d']], '2' : [['p','qa'],['r','s']]}
但是当我尝试在此之后打印x时,它保持不变。 明显。赋值语句不能以这种方式工作。有关如何访问元素以改变它的任何想法?
答案 0 :(得分:1)
>>> x ={'1': [['a','b'],['ac','d']], '2' : [['p','qa'],['r','s']]}
>>> for key in x:
... for n, item in enumerate(x[key]):
... x[key][n] = list(filter(lambda l: 'a' not in l, x[key][n]))
...
>>> x
{'2': [['p'], ['r', 's']], '1': [['b'], ['d']]}
答案 1 :(得分:1)
在您的示例中,
for item in x:
for ele in x[item]:
for i in ele:
i = #assign new value here using regex comparison
i
是ele
中字符串的副本,因此分配它对原始字符串没有影响。您需要修改列表ele
。可能是ele[ele.index(i)] = #whatever
。但请注意,如果列表中的值相同,则无法正常工作。它只会改变第一个。
不确定你实际上要做什么,但使用列表理解可能更容易,至少对于最里面的列表。这将允许您更改最里面列表的每个元素。也许,
for item in x.values():
for ele in item:
ele[:] = [#whatever for i in ele]
其中ele[:]
需要更改原始内部列表(仅ele
不起作用),而我在实际需要值时使用了更多Pythonic x.values()
,而不是密钥。