使用值作为列表列表更改字典元素

时间:2015-05-27 17:42:34

标签: python python-2.7 dictionary

我有一本与此类似的词典

    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时,它保持不变。 明显。赋值语句不能以这种方式工作。有关如何访问元素以改变它的任何想法?

2 个答案:

答案 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

iele中字符串的副本,因此分配它对原始字符串没有影响。您需要修改列表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(),而不是密钥。