Python使用列表格式加入字符串

时间:2017-07-25 08:29:58

标签: python list python-3.x

我有一个字符串格式的元组:{'biz': ['baz'], 'bar': ['foo']}。我想手动将其转换为biz=baz&bar=foo。这就是我试过的

'&'.join(("{}={}".format(key, value[0]) for key, value in s.items()))

但我得到了一个属性错误:

AttributeError: 'ParseResult' object has no attribute 'items'

我怎样才能找到问题的解决方案?

4 个答案:

答案 0 :(得分:2)

您可以先将其更改为字典格式:

import ast 
evaluated = ast.literal_eval('{'biz': ['baz'], 'bar': ['foo']}')

然后执行:

'&'.join(("{}={}".format(key, value[0]) for key, value in evaluated.items()))

答案 1 :(得分:2)

这是一种直接在字符串上运行的替代解决方案。它有点难看,而且一些正则表达式会让字符串变得更容易。此外,Agata的解决方案更好,因为它利用了你给出的字符串是字典的字面表示这一事实。这意味着如果您将d粘贴到Python解释器中,那么s.replace(',','&').replace(':','=').replace('[','').replace('{','').replace('}','').replace(']','').replace("'",'').replace(" ",'') 将是一个字典,其键是字符串和值字符串列表。

add_action( 'woocommerce_product_additional_information', 'custom_data_in_product_add_info_tab', 20, 1 );
function custom_data_in_product_add_info_tab( $product ) {

    //Product ID - WooCommerce compatibility
    $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

    // Get your custom fields data
    $custom_field1 = get_post_meta( $product_id, '_custom_meta_field1', true );
    $custom_field2 = get_post_meta( $product_id, '_custom_meta_field2', true );

    // Set your custom fields labels (or names)
    $label1 = __( 'Your label 1', 'woocommerce');
    $label2 = __( 'Your label 2', 'woocommerce');

    // The Output
    echo '<h3>'. __('Some title', 'woocommerce') .'</h3>
    <table class="custom-fields-data">
        <tbody>
            <tr class="custom-field1">
                <th>'. $label1 .'</th>
                <td>'. $custom_field1 .'</td>
            </tr>
            <tr class="custom-field2">
                <th>'. $label2 .'</th>
                <td>'. $custom_field2 .'</td>
            </tr>
        </tbody>
    </table>';
}

OP,您应该阅读一些有关基本Python数据结构的教程。

答案 2 :(得分:2)

您也可以使用正则表达式"{}={}&{}={}".format(*re.findall(r"[A-Za-z0-9_-]+", my_string))

如果您先json.loads,请my_string.replace("'",'"')

答案 3 :(得分:1)

我想这就是你想要的,虽然我不确定我是否完全理解你的问题。

"&".join(["=".join([k,v[0]]) for k,v in s.items()])